# __slots__ __doc__ __module__ __class__ __del__ __call__
# __slots__ 定义在类中的类属性,如果你有一个属性很少的类,但是有很多实例,为了节省内存可以使用__slots__
# 在类当中定义了__slots__,实例就没有自己的属性字典__dict__只能使用__slots__提供的属性且不能新增其它属性
# 实例查看属性时不能使用__dict__,只能使用__slots__
# 慎用
class Foo:
# __slots__ = 'name' # 设置一个属性 {'name': None}
__slots__ = ['name', 'age'] # 设置多个属性 {'name': None, 'age': None}
f1 = Foo()
f1.name = 'alex'
del f1.name
print(f1.__slots__) # ['name', 'age']
# print(f1.__dict__) # 报错
# __doc__ 类的描述信息,注意这个属性是不能继承的
class A:
'类的描述信息'
pass
class B(A):
pass
print(A.__doc__) # 类的描述信息
print(B.__doc__) # None
# __module__ 查看实例从哪个模块产生
# __class__ 查看实例从哪个类产生
# __del__ 析构方法:当对象在内存中被释放时,自动执行此方法,一般无需定义
# __call__ 对象后面加括号触发执行
class F:
def __call__(self, *args, **kwargs):
print('实例执行了')
f2 = F() # F(),调用了F这个类的基类中的__call__方法
f2() # 实例执行了 一个对象加()就是调用这个对象的类中的__call__方法