半加法器电路的类表示

2024-09-20 23:02:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究this book,并试图扩展它的代码,使之成为半加法器,最终成为全加法器

我想我应该实现一种方法,分别返回半加法器的进位和位,以便于连接到后面的门。然而,这就是我的空白。我还需要一些方法来调用performGateLogic上的HalfAdder并将输入“管道”到XorGateAndGate上,并且已经用Connector尝试过了。我的大脑在方法调用和类关系问题上陷入了一片混乱之中,如果有人能把它理顺,我将不胜感激

class LogicGate:

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

def getName(self):
    return self.name

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.getName()+"-->"))
    else:
        return self.pinA.getFrom().getOutput()

def getPinB(self):
    if self.pinB == None:
        return int(input("Enter Pin B input for gate "+self.getName()+"-->"))
    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:
            print("Cannot Connect: NO EMPTY PINS on this gate")


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

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):
        return 1
    else:
        return 0

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

class HalfAdder(BinaryGate):

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

    self.bits, self.carry = None, None
    self.a, self.b = None, None
    self.xor = XorGate('XO')
    self.and_ = AndGate('A')
    self.c1 = Connector(self.xor.getPinA(), self.and_.getPinA())
    self.c2 = Connector(self.xor.getPinB(), self.and_.getPinB())

def performGateLogic(self):

    self.a = self.getPinA()
    self.b = self.getPinB()

    self.bits = 1 if (self.a ==1 and self.b==0) or (self.a==0 and self.b==1) else 0
    self.carry = 1 if (self.a==1 and self.b ==1) else 0
    return self.bits + self.carry

运行print(HalfAdder('HA').getOutput())产生

File "./circuits.py", line 178, in __init__
    self.c1 = Connector(self.xor.getPinA(), self.and_.getPinA())
  File "./circuits.py", line 161, in __init__
tgate.setNextPin(self)
AttributeError: 'int' object has no attribute 'setNextPin'

有些东西被设置为int,但在哪里,我找不到


Tags: andselfnoneconnectorreturnifinitdef

热门问题