一、__slots__
用来取代 __dict__ 优势是省内存
附加功能是只能创建slots 定义好的key
注意:不要乱用,用了就没有__dic__方法了
class Foo: __slots__ = ['name','age'] #这里可以是列表或者单个字符串,定义key值 f1 = Foo() print(f1.__slots__) f1.name = 'jinling' #只能给前面定义好的key设置值 print(f1.name) f1.age = 18 #只能给前面定义好的key设置值 print(f1.age)
二、__doc__
查看类文档,该属性无法继承
class Foo: '我喜欢一个女孩' pass class Bar(Foo): pass print(Foo.__doc__) print(Foo.__dict__) print(Bar.__dict__)
三、__module__ : 查看当前操作的对象在哪个模块
__class__ :查看当前操作的对象的类是什么
#syudy1 class Foo: print('她还没回我的消息') #lala from syudy1 import Foo f1 = Foo() print(f1.__module__) print(f1.__class__)
四、__del__ 析构方法
当对象在内存中被释放时,自动触发执行,由python解释器自动去完成,平时不用管
class Foo: def __del__(self): print("执行我啦") f1 = Foo() del f1 print("----------------->")
class Foo: def __del__(self): print("执行我啦") f1 = Foo() # del f1 print("----------------->")
上面两个程序对比一下,为什么下面这个没有执行删除操作也触发释放内存了呢?
因为呢,在整个程序运行结束的时候,也会自动释放上面类占用的内存,所以就触发啦
五、__call__
对象后面加括号,触发执行
class Foo: def __call__(self, *args, **kwargs): print('我执行啦') f1 = Foo() f1() #执行Foo下的__call__ Foo() #执行的是Foo所属类下的__call__