原文
2.6.1 实例
我们先从实例开始。一个实例有属于自己的实例属性,例如一个银行帐户得有一个可以更改和检索的余额。我们曾使用调度字典(dispatch dictionary)(2.4.8节)实现了一个能对传递进来的信息作出反应的实例。同时,使用一个名为“attributes”的字典存储实例属性。
字典本身属于抽象数据类型,而正如我们之前曾用列表实现了字典一般,各种抽象数据类型只是一种概念,我们可以通过各种抽象去实现甚至创造这种概念。正如我们打算用字典实现OOP系统,同样的,函数也拥有这样的能力。
我们创建一个make_instance函数用于执行创建实例的操作,形参cls即为我们要创建实例的所属类。
函数中的instance是一个能对‘get’和‘set’作出反应的调度字典。传入‘set’信息,对应OOP中的对属性赋值,所有被赋值属性被存储在名为“attributes”的字典里。在传入‘get’信息时,若无法在调用该实例函数产生的局部框架中的“attributes”的字典里找到相应的属性名称,则前往类中检索该名称。
绑定方法(Bound method values)
在我们传递‘get’时,make_instance函数内的get_value函数会被调动起来,检索对应的名称,若不存在,则会调用函数bind_method。
bind_method调用后,在类中检索相应的名称,并检测该名称绑定的是一个函数还是一个变量。若为函数,则自动将实例传递给该函数,返回一个方法(方法即是第一个形参self被绑定了实例的函数)。若不是函数,则返回变量的值。