python中属性和方法的动态绑定

  • 2020 年 1 月 13 日
  • 筆記

# 定义一个类
class Student(object):      pass    # 实例化一个对象      s = Student()  # 给这个对象绑定一个属性name  s.name = 'John'    print(s.name)  John    # 定义一个方法  def set_age(self, age):      self.age = age    # 导入模块      from types import MethodType    #给s这个对象绑定一个set_age的方法  s.set_age = MethodType(set_age, s)    s.set_age = 30  s.age  25      # 给实例对象绑定的方法只对该实例有效。      # 给所有的实例绑定方法的做法是给类绑定方法  def set_score(self, score):      self.score = score        Student.set_score = MethodType(set_score, Student)    # 给类绑定方法后,所有实例均可调用

python中的__slots__变量

__slots__变量的作用就是限制该类实例能添加的属性:

class Student(object):      __slots__ = ('name', 'age')

在创建Student实例的时候只能动态绑定name和age这两个属性。

__slots__定义的属性仅对当前类实例起作用,对继承的子类不起作用。