slots

class Student(object):
    pass
s = Student()
s.name = 'Michael'
print(s.name)

def set_age(self, age):
    self.age = age
from types import MethodType
s.set_age = MethodType(set_age, s) #给实例绑定一个方法
s.set_age(25)
print(s.age)
#注意给一个实例绑定的方法对于另一个实例是不起作用的
s2 = Student() #创建新的实例
#为了给所有的实例都绑定方法,可以给class绑定方法
def set_score(self, score):
    self.score = score
Student.set_score = set_score
s.set_score(100)
print(s.score)
s2.set_score(99)
print(s2.score)

#如果我们想限制类的属性,比如,只允许对Student实例添加name和age属性
#__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的:
#除非在子类中也定义__slots__,这样,子类实例允许定义的属性就是自身的__slots__加上父类的__slots__。
class Student(object):
    __slots__ = ('name', 'age')
s = Student()
s.name = 'Michael'
s.age = 25
#s.score = 99 #因为__slots__('name', 'age')限制Student实例只能添加name和age属性

 

posted on 2016-06-17 19:38  张明明_1  阅读(702)  评论(0编辑  收藏  举报

导航