CS61A fa2021 Composing Programs 2.6.1 Instances 实例

原文

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被绑定了实例的函数)。若不是函数,则返回变量的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值