TypeError:object()不带参数3

时间:2017-12-29 19:32:30

标签: python-3.x

我是初学者,在尝试程序错误时: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()

1 个答案:

答案 0 :(得分:1)

  1. 将成员函数中的第一个参数称为self是一个强有力的约定,因为它引用了它被调用的对象,而不是其他对象。也就是说,

    def logic(self):
    

    澄清它正在研究它.SELF。

  2. 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__来跳过更少的箍。

  3. 根据您所显示的内容,门不具备.output字段并非完全必要。它只能从.logic()计算结果并返回它,只存储它的输入。

    def output(bit):
      """ the output of the gate """
      return bit.logic()
    
  4. AndGate的逻辑被破坏 - 它检查[0]两次。它应该检查self.input [0]和self.input [1]。

  5. 很难判断Tabbing是否被Stack Overflow剔除,但是目前还不清楚Gates的 init ,逻辑,并输出了输出功能。

  6. 将活动逻辑置于定义之间是绝对不好的形式:

    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))
    
  7. 完全可能的是,对于第5点和第6点,错误只是来自被声明为Gate的一部分,而不是全局变量作为运行时程序的一部分。