我正在学习来自
的面向对象编程使用算法和数据结构解决问题。
我无法理解Connector Class中的setNextPin(self,source)方法。我明白tgate.setNextPin(self)意思是tgate.setNextPin(tgate,self)但是这里真的是什么?让我感到困惑的是连接器的自我代表什么? 从逻辑上讲,这个方法会设置tgate.PinA = self,因为我们希望tgate从fgate获取值,所以self == fgate?对不起,如果问题是愚蠢或混乱
class Connector:
def __init__(self, fgate, tgate):
self.fromgate = fgate
self.togate = tgate
tgate.setNextPin(self)
def getFrom(self):
return self.fromgate
def getTo(self):
return self.togate
我想我理解自我的基本思想,但如果我们有:
g1 = AndGate("G1")
g2 = AndGate("G2")
g3 = OrGate("G3")
c1 = Connector(g1,g3)
所以在这种情况下g3setNexPin(self)会将g3的下一个引脚设置为c1 ??但是c1只是一个连接器而且没有任何值?
答案 0 :(得分:1)
self
指的是"当前"宾语。在__init__()
中,这是正在创建和初始化的对象。因此tgate.setNextPin(self)
将tgate
的下一个引脚设置为当前Connector
。你猜不到它不是fgate
。这是正在初始化的新Connector
。
有关详细信息,请参阅What is the purpose of self?
所以在这种情况下
g3.setNexPin(self)
会将g3的下一个引脚设置为c1 ??
这基本上是正确的。一个小的挑剔:实际代码是tgate.setNextPin(self)
。在此特定情况下,tgate
引用与g3
相同的对象,self
引用正在创建的对象。 __init__()
返回后,将分配c1
来引用此新创建的对象。
答案 1 :(得分:1)
我刚刚在阅读这本书时偶然发现了这个问题。我在尝试时找到了答案
执行本节末尾给出的整个活动代码。在 BinaryGate 类中,getPinA()
返回
'self.pinA.getFrom().getOutput()'
所以崩溃-
'self.pinA --> c1'
'c1.getFrom() --> g1'
'g1.getOutput() --> gets the output of gate g1'
此 getPinA()
用于将输入发送到二进制门,因此提供连接器作为 tgate.setNextPin()
的源是有意义的
参考链接:https://runestone.academy/runestone/books/published/pythonds/Introduction/