python对象和类都是利用__dict__设置动态属性,例如下面
class Student:pass
s = Student()
s.name="ttt"
def set_age(self,age):
self.age =age
Student.set_age = set_age
Student.__dict__
g = Student()
g.set_age("ff")
通过上面的例子解释了python对象属性都是可以动态添加
而__slots__的作用是防止类和对象属性无节制的添加,
class Student:
__slots__=("name")
n = Student()
n.name = "ff"
n.age= "f"
当添加不在__slots__定义的属性时,python就会报错
下面就来聊聊关于__slots__继承问题
- 当父类有__slots__子类没有时,子类可以看作正常的__dict__
- 当父类有__slots__子类有时,子类可以看作__slots__,并继承父类的
- 当父类没有有__slots__子类有时,子类可以看作__slots__,
class SStudent(Student):
pass
ss = SStudent()
ss.age ="gg"
class pStudent(Student):
__slots__ = ("sex")
pp = pStudent()
pp.name = "aa"
pp.sex = 0
pp.age = "ff"