- Python的类都会从Object中继承一个
__dict__
属性,保存该类属性和方法的键值对。 - 类的实例也有
__dict__
属性,但是只保存实例的属性与方法,不包含类的内容。
class Stu:
state = 1
def __init__(self, name):
self.name = name
s = Stu('Qiu')
print(Stu.__dict__)
print(s.__dict__)
s.age=18
print(s.__dict__)
输出结果为:
{'__module__': '__main__', 'state': 1, '__init__': <function Stu.__init__ at 0x000002496F8A7E18>, '__dict__': <attribute '__dict__' of 'Stu' objects>, '__weakref__': <attribute '__weakref__' of 'Stu' objects>, '__doc__': None}
{'name': 'Qiu'}
{'name': 'Qiu', 'age': 18}
注:但是由于每实例化一个类都要分配一个__dict__变量,容易浪费内存。因此在python中有一个内置的__slots__属性。当一个类设置了__slots__属性后,这个类的__dict__属性就不存在了(同理,该类的实例也不存在__dict__属性),如此一来,设置了__slots__属性的类的属性,只能是预先设定好的。