属性和方法的动态绑定
定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。先定义class:
给实例绑定一个属性:
给实例绑定一个方法:
只是绑定这个单独的对象上,同类的其他实例化的对象的并没有受到影响。
给类绑定一个方法:
class Person: pass def set_class1(cls, class1): print("给类绑定了一个类方法") cls.class1 = class1 def set_gender(self, gender): print("给类绑定了一个一般方法") self.gender = gender Person.set_class=MethodType(set_class1,Person) Person.set_gender=MethodType(set_gender,Person) Person.set_class("大一") Person.set_gender("男") p=Person() p.set_gender("11")
看来给类绑定一个一般方法也可以。。哈哈 其对象实例对象也能共享
属性和方法的限制
如果我们想要限制class的属性怎么办?比如,只允许对Student实例添加name和age属性。
为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class能添加的属性:
class Dog(object): __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称 d = Dog() # 创建新的实例 d.name = 'Michael' # 绑定属性'name' d.age = 25 # 绑定属性'age' d.score = 99 # 绑定属性'score
vs: