__slots__函数的使用
部分内容来自网络:
添加链接描述
1.用法及意义:我们知道python是动态语言:可以在运行的过程中,修改代码。比如给对象增加属性,给类增加方法等操作。但是如果任意添加或者修改而没有约束的话,对程序的健壮性和安全都没有保障。 实际开发中,给实例添加属性进行约束的话,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性。
2.对于Python是动态语言的实例解释,比如类Person在定义时绑定的只有name,age,属性,但是在运行时我们可以给他的实例对象增加新的属性,例如:p1._country = ‘China’ ,print(p1._country),结果为:China;所以我们认为Python为动态语言,而但我们在Person定义中绑定属性之前使用了 __slots__函数时,例如:slots = (‘name’,‘age’) ,则 实例对象p1就只能够绑定name和age属性,不能够增加其他属性,否则会发生Error;
3.但是对于用__slots__函数限定的Person类,其他子类却是不受限定的,则其子类Student可以添加其他的属性。
4.代码示例:
class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
#注意这里__slots__函数中的参数用“”包裹
__slots__ = ("name", "age")
class Student(Person):
def __init__(self,name,sex,age):
super().__init__(name,age)
self.sex = sex
p1 = Person("tom",18)
p1.sex = "male" #AttributeError: 'Person' object has no attribute 'sex',添加不了别的属性
stu1 = Student("jack","male",22)
print(stu1.name,stu1.sex,stu1.age)
stu1.country= "china"
print(stu1.country) #虽然父类设置__slots__属性约束,但是对子类没有约束力。