标签:
正常情况下,当我们定义了一个class,创建一个class实例后,我么可以给实例绑定任何属性和方法,这就是动态语言的灵活性,依旧创建一个新类 Student
class Students(): pass sc =Students() sc.name = ‘sc‘ print(sc.name)
还可以给实例绑定一个方法
def set_name(self,name): self.name = name from types import MethodType sc.set_name = MethodType(set_name,sc) sc.set_name(‘pdf‘) print(sc.name)
但是给一个实例绑定方法对另一个实例,是不起作用的,我们可以给class绑定方法
Students.set_name =set_name cc = 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 = 22 AttributeError: ‘Studente‘ object has no attribute ‘score‘
需要注意的是,使用__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的
标签:
原文地址:http://www.cnblogs.com/notJoke/p/5869346.html