关于python逻辑门一段代码的小问题

这篇博客探讨了一个关于Python实现逻辑门代码的问题,特别是聚焦于`getPinA()`中`self.pinA.getFrom().getOutput()`的执行流程。作者解释了`self.pinA`为何属于`Connector`类,关键在于`Connector`实例化时如何通过`setNextPin(self)`将自身传递给`BinaryGate`类。这个理解过程对于初学者来说是个挑战,作者通过自问自答的方式清晰地阐述了这个问题,旨在帮助其他新手解决相同困惑。博客最后展示了一段示例代码,包括`LogicGate`、`BinaryGate`、`UnaryGate`、`AndGate`、`OrGate`、`NotGate`和`Connector`类的定义,以及它们之间的连接,并输出了逻辑运算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于python逻辑门一段代码的小问题

有没有大佬可以解释下在以下逻辑门代码中,在getPinA()中self.pinA.getFrom().getOutput()这段函数到底是怎么运行的?
或者说为什么self.pinA是属于connector类的?万分感谢!

自问自答:其实是self的指向没有搞明白,在Connector类实例化时,运行了tgate.setNextPin(self)这段代码并向其中传递了自己的实例,而在BinaryGate类的setNextPin(self, source)这段代码中的source即是在Connector实例化时传递进来的Connector实例,此时就可以发现self.pinA成为了Connector实例,因此也就可以调用Connector类中的getFrom()的函数方法了。

在想通这个问题的过程之中发现也有些和我一样的刚入门小白也有同样的疑问,因此把这个解释分享出来,希望可以对和我一样的同学有些帮助。

class LogicGate:

def __init__(self, n):
    self.label = n
    self.output = None

def getLabel(self):
    return self.label

def getOutput(self):
    self.output = self.performGateLogic()
    return self.output

class BinaryGate(LogicGate):

def __init__(self, n):
    super().__init__(n)

    self.pinA = None
    self.pinB = None

def getPinA(self):
    if self.pinA == None:
        return int(input("Enter Pin A input for gate " + \
                        self.getLabel() + "--->"))
    else:
        return self.pinA.getFrom().getOutput()

def getPinB(self):
    if self.pinB == None:
        return int(input("Enter Pin B input for gate " + \
                         self.getLabel() + "--->"))
    else:
        return self.pinB.getFrom().getOutput()

def setNextPin(self, source):
    if self.pinA == None:
        self.pinA = source
    else:
        if self.pinB == None:
            self.pinB = source
        else:
            raise RuntimeError("Error: NO EMPTY PINS")

class UnaryGate(LogicGate):

def __init__(self, n):
    super().__init__(n)

    self.pin = None

def getPin(self):
    if self.pin == None:
        return int(input("Enter Pin A input for gate " + \
                         self.getLabel() + "--->"))
    else:
        return self.pin.getFrom().getOutput()

def setNextPin(self, source):
    if self.pin == None:
        self.pin = source
    else:
        raise RuntimeError("Error: NO EMPTY PINS")

class AndGate(BinaryGate):

def __init__(self, n):
    super().__init__(n)

def performGateLogic(self):

    a = self.getPinA()
    b = self.getPinB()
    if a==1 and b==1:
        return 1
    else:
        return 0

class OrGate(BinaryGate):

def __init__(self, n):
    super().__init__(n)

def performGateLogic(self):

    a = self.getPinA()
    b = self.getPinB()
    if a==1 or b==1:
        return 1
    else:
        return 0

class NotGate(UnaryGate):

def __init__(self, n):
    super().__init__(n)

def performGateLogic(self):

    a = self.getPin()
    if a==1:
        return 0
    else:
        return 1

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”)
g4 = NotGate(“G4”)
c1 = Connector(g1, g3)
c2 = Connector(g2, g3)
c3 = Connector(g3, g4)
print(g4.getOutput())
====>0

好的,我可以为您提供一段Python编写的电路设计代码。下面是一个简单的示例,它实现了一个简单的逻辑门电路。 ``` # 逻辑门电路的实现 # 定义逻辑门的类 class LogicGate: def __init__(self, n): self.label = n self.output = None def getLabel(self): return self.label def getOutput(self): self.output = self.performGateLogic() return self.output # 定义两个输入门的类 class BinaryGate(LogicGate): def __init__(self, n): LogicGate.__init__(self, n) self.pinA = None self.pinB = None def getPinA(self): if self.pinA == None: return int(input("Enter Pin A input for gate " + self.getLabel() + "-->")) else: return self.pinA.getFrom().getOutput() def getPinB(self): if self.pinB == None: return int(input("Enter Pin B input for gate " + self.getLabel() + "-->")) else: return self.pinB.getFrom().getOutput() def setNextPin(self, source): if self.pinA == None: self.pinA = source else: if self.pinB == None: self.pinB = source else: raise RuntimeError("Error: No empty pins") # 定义一个输出门的类 class UnaryGate(LogicGate): def __init__(self, n): LogicGate.__init__(self, n) self.pin = None def getPin(self): if self.pin == None: return int(input("Enter Pin input for gate " + self.getLabel() + "-->")) else: return self.pin.getFrom().getOutput() def setNextPin(self, source): if self.pin == None: self.pin = source else: raise RuntimeError("Error: No empty pins") # 定义 NOT 门的类 class NotGate(UnaryGate): def __init__(self, n): UnaryGate.__init__(self, n) def performGateLogic(self): if self.getPin(): return 0 else: return 1 # 定义 AND 门的类 class AndGate(BinaryGate): def __init__(self, n): BinaryGate.__init__(self, n) def performGateLogic(self): a = self.getPinA() b = self.getPinB() if a == 1 and b == 1: return 1 else: return 0 # 定义 OR 门的类 class OrGate(BinaryGate): def __init__(self, n): BinaryGate.__init__(self, n) def performGateLogic(self): a = self.getPinA() b = self.getPinB() if a == 1 or b == 1: return 1 else: return 0 # 定义 XOR 门的类 class XorGate(BinaryGate): def __init__(self, n): BinaryGate.__init__(self, n) def performGateLogic(self): a = self.getPinA() b = self.getPinB() if (a == 1 and b == 0) or (a == 0 and b == 1):
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值