上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法。 一、 使用__dict__定义实例变量

  1. 语法: 对象名. dict[属性名] = 值
  2. 语法释义: “对象名”为要增加实例变量的对象,如果是在实例方法中,应该为”self”。 属性名为要定义实例变量的名字,必须是字符串类型,即变量名必须用引号。 上述语法相当于: 对象.属性 = 值。 这是由于Python中所有变量都存在对应名字空间的字典中,定义变量就是增加一个字典的元素。

二、 使用__dict__定义实例方法

  1. 语法: 对象名. dict[属性名] = 函数名
  2. 语法释义: “对象名”为要增加实例变量的对象,如果是在实例方法中,应该为”self”,关于self,请参考《第7.5节 揭开Python类中self的面纱》。 属性名为要定义实例方法的名字,必须是字符串类型,即变量名必须用引号。 三、 案例
  3. 案例说明 例子中定义了一个类Car,在该类的构造方法中使用__dict__增加了一个实例变量和一个drive方法,其中drive方法与self的绑定使用了《第7.14节Python类中的实例方法解析》中介绍的MethodType。定义类后我定义一个实例,来访问通过__dict__增加的实例变量和实例方法。
  4. 源代码(交互模式)
>>> from types import MethodType #导入MethodType方法
>>> def fdrive(self,distance):self.totaldistance += distance  #定义一个函数,准备用于赋值给类的实例方法属性

>>> class Car():
    def __init__(self, power):
        self.power = power
        self.__dict__['totaldistance'] = 10  #使用__dict__定义实例变量
        self.__dict__['drive'] = MethodType(fdrive,self)  #将函数赋值给drive方法,并与self绑定
        
>>> car = Car('汽油发动机')
>>> car.drive(103)
>>> car.totaldistance
113
  1. 执行截屏 为了简单说明,我们只介绍在实例方法中使用__dict__定义实例变量和实例方法,实际上与动态定义实例变量和方法一样,使用__dict__一样可以在类体外定义实例变量和方法。只是把实例方法中定义的方法的调用者由”self”改成”实例对象”即可。在此就不展开说了。 本节结合案例介绍了直接使用类中的__dict__定义实例变量和实例方法,本身这种实现方式没有多大价值,只是为了说明类中属性的定义本质上就是操作__dict__的元素。