首页 > 代码库 > MyPython-->进阶篇-->__slots__
MyPython-->进阶篇-->__slots__
正常情况下,当我们定义了一个class,创建一个class实例后,我么可以给实例绑定任何属性和方法,这就是动态语言的灵活性,依旧创建一个新类 Student
class Students(): passsc =Students()sc.name = ‘sc‘print(sc.name)
还可以给实例绑定一个方法
def set_name(self,name): self.name = namefrom types import MethodTypesc.set_name = MethodType(set_name,sc)sc.set_name(‘pdf‘)print(sc.name)
但是给一个实例绑定方法对另一个实例,是不起作用的,我们可以给class绑定方法
Students.set_name =set_namecc = Students()cc.set_name(‘cc‘)print(cc.name)
如果我们想要限制实例的属性怎么办,比如只允许添加name和age属性
为了达到限制目的,python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性
class Studente(): __slots__ = (‘name‘,‘age‘)s = Studente()s.name = ‘s‘s.score = 22
添加score属性会报错
Traceback (most recent call last): File "D:/pythontest/pycharmt/senior/slots.py", line 22, in <module> s.score = 22AttributeError: ‘Studente‘ object has no attribute ‘score‘
需要注意的是,使用__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的
MyPython-->进阶篇-->__slots__
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。