一、__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__)
![](https://img2018.cnblogs.com/blog/1697453/201910/1697453-20191006170819060-92320413.png)
四、__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__