我是初学者,在尝试程序错误时:TypeError:object()不经常出现任何参数。
next_output = True
def start() :
class Gate(object):
""" class representing a gate. It can be any gate. """
def __init__(bit, *args):
""" initialise the class """
bit.input = args
bit.output = None
def logic(bit):
""" the intelligence to be performed """
raise NotImplementedError
def output(bit):
""" the output of the gate """
bit.logic()
return bit.output
a = int(input("Enter the first input: "))
b = int(input("Enter the second input: "))
class AndGate(Gate):
""" class representing AND gate """
def logic(bit):
bit.output = bit.input[0] and bit.input[0]
return bit.output
class NotGate(Gate):
""" class representing NOT gate """
def logic(bit):
bit.output = not bit.input[0]
return bit.output
class NandGate(AndGate,NotGate):
def logic(bit):
bit.flag = AndGate.logic(bit)
Gate.__init__(bit,bit.flag)
bit.output = NotGate.logic(bit)
return bit.output
n = NandGate(a,b).logic()
print(int(n))
while next_output :
start()
运行时出现错误 n = NandGate(a,b).logic()
答案 0 :(得分:1)
将成员函数中的第一个参数称为self是一个强有力的约定,因为它引用了它被调用的对象,而不是其他对象。也就是说,
def logic(self):
澄清它正在研究它.SELF。
NandGate应该是HaveA,而不是IsA和/ NotGate。
class NandGate(Gate):
def logic(self):
anded = AndGate(self.input).logic() # calculate the and'd values
notted = NotGate(anded).logic() # not them
return notted
这不仅比使用一个对象更清晰,它更整洁地重用代码,并且通过调用特定的__init__来跳过更少的箍。
根据您所显示的内容,门不具备.output字段并非完全必要。它只能从.logic()计算结果并返回它,只存储它的输入。
def output(bit):
""" the output of the gate """
return bit.logic()
AndGate的逻辑被破坏 - 它检查[0]两次。它应该检查self.input [0]和self.input [1]。
很难判断Tabbing是否被Stack Overflow剔除,但是目前还不清楚Gates的 init ,逻辑,并输出了输出功能。
将活动逻辑置于定义之间是绝对不好的形式:
class Gate():
def __init__():
# definitions
class NotGate(Gate):
# more definitions
# functional flow of program
a = int(input("Enter the first input: "))
b = int(input("Enter the second input: "))
n = NandGate(a,b).logic()
print(int(n))
完全可能的是,对于第5点和第6点,错误只是来自被声明为Gate的一部分,而不是全局变量作为运行时程序的一部分。