python的类和对象

python
创建于:2019年08月29日

python中存在多继承,如果多个父类中存在某个相同的方法名,子类调用该方法时则优先调用左边的父类方法

静态方法:@staticmethod
方法中不用写self形参,调用时直接class_name.staticmethod_name()

类方法:@classmethod
方法中需要写cls形参,调用时直接class_name.classmethod_name()

类属性(静态属性):直接在类中定义的变量,没有self调用。调用:class_name.variable

@property装饰器负责把一个方法变成属性调用

python中以双下划线开头的属性或方法为私有属性或方法,只能在本类中自己访问,外部或者子类中都不可访问(不是绝对的,外部有办法可以访问到,但是外部不应该访问)

__call__():把一个实例变为可调用对象,在类中定义了__call__()方法,就可以直接对实例进行调用。可以像函数一样传参


class A(object):
    def __getitem__(self, key):
        pass
    def __setitem__(self, key, value):
        pass
    def __delitem__(self, key):
        pass
a = A()
__getitem__()
a[key]:自动调用__getitem__方法

__setitem__()
a[key] = value:自动调用__setitem__方法

__delitem__()
del a[key]:自动调用__delitem__方法


obj.__dict__:以字典形式返回对象所有属性
class.__dict__:以字典形式返回类里所有成员

__iter__()

__str__()
print()打印一个对象时自动调用该方法,打印的内容为__str__方法返回的内容

__repr__()
和__str__()方法功能一样,只是不需要print()打印就会调用该方法

__slots__
__slots__:变量__slots__可以用来限制实例能添加的属性,不管在类中还是当前类实例都只能定义__slots__中规定的属性
__slots__ = ('name','age') #用tuple定义允许绑定的属性名称
__slots__定义的属性仅对当前实例起作用,对继承的子类是不起作用的

__getattr__(self,attr)
__getattr__()方法在调用不存在的属性时自动调用

__getattribute__
类中定义了__getattribute__()方法则对象调用类中的属性会被此方法拦截

assert 条件
assert 后面的条件不成立直接抛出异常