欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python day4

程序员文章站 2022-07-14 17:41:03
...

python day4

面向对象

获取对象信息

getattr()、hasattr()、setattr()操作类的属性和方法

getattr(对象, 属性)
获得属性的值,如果没有该属性就AttributeError
getattr(对象, 属性, 返回默认值)
getattr(obj, 'y', 404)
如果y属性不存在,返回404

hasattr(对象, 属性)
True、False

setattr(对象, 属性, 属性值)
给对象设置属性并赋值

用于不知道对象的信息时,去剖析对象。平时不要用。

对象属性 和 类属性

对象的属性除了构造器外,还可以在对象创建以后再去给指定属性。
也就是对象绑定属性

class Student(object):

    def __init__(self, name):
        self.__name = name

xiaoming = Student('xiaoming')
xiaoming.age = 8

类属性

class Student(object):
    name = 'student'

可以通过类调用类属性
Student.name
也可以通过对象:
xiaoming.name
前提是对象没有和类属性同名的属性
如果对象属性和类属性重名,那么用对象调用,由于优先级的问题,会屏蔽类属性,调用对象属性。
删除掉对象属性后,才可以访问类属性。

为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:

# -*- coding: utf-8 -*-

class Student(object):
    count = 0

    def __init__(self, name):
        self.name = name
        Student.count += 1

面向对象高级编程

封装、继承、多态,面向对象三板斧
python还有高级特性:
多重继承、定制类、元类

使用__slots__

动态绑定允许我们在类之外给对象绑定属性和方法

# -*- coding: utf-8 -*-

class Student(object):
    pass

liupangzi = Student()
liupangzi.name = 'liupz'

def set_age(self, age):
    self.age = age

from types import MethodType
liupangzi.set_age = MethodType(set_age, liupangzi)
liupangzi.set_age(25)

给一个对象绑定,另外创建的新对象仍然没有这些属性和方法
可以给类绑定方法,这样,所有对象都会具有这些方法

Student.set_age = set_age