python的类和对象
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 后面的条件不成立直接抛出异常