python中實例建立後能夠給實例綁定任何屬性和方法python
class Student(object): pass
給實例綁定一個屬性:spa
s=Student() s.name='Michel' print s.name # Michel
給實例綁定一個方法:blog
def set_age(self,age): self.age=age from types import MethodType s.set_age=MethodType(set_age,s,Student) s.set_age(25) print s.age #25
給實例綁定的方法,對另外一個實例是不起做用的,爲了給全部的實例都綁定方法,能夠給class綁定方法繼承
給類綁定方法class
def set_score(self,score): self.score=score Student.set_score=MethodType(set_score,None,Student) s.set_score(100) print s.score #100 s2=Student() s2.set_score(89) print s2.score #89
上面的set_score方法能夠直接定義在class中,但動態綁定容許咱們在程序運行的過程當中動態給class加上功能import
__slots__限制class能添加的的屬性object
class People(object):
__slots__=('name','age') #用tuple定義容許綁定的屬性名稱
p=People()
p.name='Michel'
p.age=23
p.score=99 #綁定屬性score
因爲score沒有放到__slots__中,因此不能綁定score屬性,此時會報錯:AttributeError: 'People' object has no attribute 'score'程序
__slots__定義的屬性僅對當前的類起做用,對繼承的子類是不起做用的,除非在子類中也定義__slots__,這樣子類容許定義的屬性就是自身的加上父類的方法
class GraduateStudent(Student): pass g=GraduateStudent() g.score=99