python slots属性

__ slots __

1、slots__是什么:是一个类变量,变量值可以使列表、元组或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性)
2、引子:使用点来访问属性本质就是在访问类或者对象的__dict__属性字典(类的字典是共享的,每个实例的字典是独立的)
3、为何使用__slots
:字典会占用大量内存,如果你有一个属性很少的类,但是有很多实例,为了节省内存就可以使用__slots__取代实例的__dict__

class Foo:
    #__slots__ = ['name','age']
    __slots__ = 'name'  
    #优势:省内存,不要用于限制实例设定,它会使__dict__用不了,慎用

f1 = Foo()
f1.name = 'aaa'
print(f1.name)
#f1.age = 12        #会报错
print(f1.__slots__)
print(Foo.__slots__)

各种方法介绍

__doc__		#特点:不会被继承
__module__	#查看函数来自哪个模块
__class__	#查看函数来自哪个类
__del__		# 析构方法,当对象在内存中被释放时,自动触发执行(del 对象  或  程序执行完毕  都会调用该方法)
__call__		#对象后面加括号,触发执行
class Foo:
    '我是描述信息'
    pass
class Bar(Foo):
    pass

print(Foo.__dict__)
print(Bar.__dict__)     #__doc__ 不会被继承
class Foo:
    def __call__(self, *args, **kwargs):
        print('执行实例。。。')

f1 = Foo()
f1()   	 #用的 Foo 下的 __call__ 方法
Foo()   	 #用的 abc 下的 __call__ 方法

你可能感兴趣的:(python)