【问题标题】:Logic Gates and Circuits - What is the self in Connector class stand for逻辑门和电路 - 连接器类中的 self 代表什么
【发布时间】:2016-08-17 18:32:45
【问题描述】:

我正在从

学习面向对象编程

用算法和数据结构书籍解决问题。

我无法理解连接器类中的 setNextPin(self,source) 方法。我知道 tgate.setNextPin(self) 的意思是 tgate.setNextPin(tgate,self) 但这里的 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) 

所以在这种情况下 g3.setNexPin(self) 会将 g3 的下一个引脚设置为 c1 ??但是 c1 只是一个连接器,没有任何值??

【问题讨论】:

  • 是的,g3.setNextPin(self) 会将g3 的“下一个”引脚设置为c1。至于下一句,由于我对这本书不熟悉,请您详细说明“但是 c1 只是一个连接器并且没有任何价值?”是什么意思。
  • 啊对不起,我的意思是g3的pin必须是一个值对。 g3 是一个 OrGate 类,它接受两个值,例如 False 或 False 并返回值 False。我的意思是 c1 不保存任何值,所以我们如何将 g3 的引脚设置为 c1
  • 根据您在此处显示的内容,没有布尔值存储在任何地方。但是,您尚未发布任何门类代码。可能最容易将Connector 类视为连接面包板上门的引脚的电线。

标签: class python-3.x object


【解决方案1】:

self 指的是“当前”对象。在__init__() 中,这是正在创建和初始化的对象。所以tgate.setNextPin(self)tgate 的下一个引脚设置为当前的Connector。不是你猜的fgate。正在初始化的是新的Connector

更多详情请见What is the purpose of self?

所以在这种情况下 g3.setNexPin(self) 会将 g3 的下一个引脚设置为 c1 ??

这基本上是正确的。一个小问题:实际代码是tgate.setNextPin(self)。在这种特殊情况下,tgateg3 指代相同的对象,self 指代正在创建的对象。 __init__() 返回后,c1 将被分配来引用这个新创建的对象。

【讨论】:

  • 我想我理解了基本思想,但如果我们有: g1 = AndGate("G1") g2 = AndGate("G2") g3 = OrGate("G3") c1 = Connector(g1 ,g3) 所以在这种情况下 g3.setNexPin(self) 会将 g3 的下一个引脚设置为 c1 ??但 c1 只是一个连接器,没有任何价值??
  • @AnhHoang 如果您有更多详细信息,您应该考虑编辑您的问题......尤其是代码,因为您无法在评论中很好地格式化它。
  • 我已将问题编辑得更清楚,请帮助
  • 这里是章节链接,末尾有完整代码interactivepython.org/runestone/static/pythonds/Introduction/…
【解决方案2】:

我只是在阅读这本书时偶然发现了这个问题。当我尝试时我找到了答案 执行本节末尾给出的整个活动代码。在 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/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多