问题学习面向对象的编程使用的交互式Python网站提供的在线版本的算法和数据结构解决
书。链接在下面提到。
我听不太懂那是在上面的链接中提到的Connector
类。 IS-A和HAS-A关系的区别究竟是什么?
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
方法setNextPin
在BinaryGate(LogicGate)
定义具有source
的输入。但是当它在Connector
课程中被访问时,我们没有提供第二个参数。那么即使没有提供所有参数,它如何实现。
另外,Connector
类中的setNextPin
方法如何理解它可以访问为BinaryGate
类定义的方法?
我试过了,但我不知道。有人可以帮助我理解这一点。
要回答你的第一个子问题:调用'tgate.setNextPin(self)'确实会导致方法在其声明中接收两个名为'self'和'source'的参数。每当一个对象方法被调用时,它传递的第一个参数总是对象 - 这是调用者中的'tgate' - 加上方法名称后面括号中列出的任何附加参数。在这种情况下,它是调用者端被称为'self'的'Connector'实例,但在被调用者的代码中被称为'source'。双方不同的名字可能是你在这一点上混淆的原因。 – martineau
非常感谢@martineau。我之前在OOP中阅读过这种实现。但是直到你提到这件事,我才弄明白。谢谢 – RTM