【问题标题】:__init__() takes from 1 to 3 positional arguments but 4 were given__init__() 接受 1 到 3 个位置参数,但给出了 4 个
【发布时间】:2013-11-26 05:47:15
【问题描述】:
class GeometricObject:
    def __init__(self,color = 'green',filled='true'):
        self.__color=color
        self.__filled=filled
    def getColor(self):
        return self.__color
    def setColor(self,color):
        self.__color=color
    def isFilled(self):
        return self.__filled
    def setFilled(self,filled):
        self.__filled=filled
    def __str__(self):
        return "Color: " + self.__color + " Filled: " + str(self.__filled)

这是 Triangle 类:

   from GeometricObject import GeometricObject

   class Triangle(GeometricObject):
       def __int__(self,side1=1.0,side2=1.0,side3=1.0):
           super().__init__()
           self.__side1=side1
           self.__side2=side2
           self.__side3=side3

       def getPerimeter(self):
           return self.__side1 + self.__side2 + self.__side3

       def __str__(self):
           return super().__str__()+" side 1: "+str(self.__side1)+" side 2: "+str(self.__side2)+" side 3: "+str(self.__side3) 

       from triangle import Triangle
       from GeometricObject import GeometricObject

       def main():
           side1=int(input("Enter first side: "))
           side2=int(input("Enter second side: "))
           side3=int(input("Enter third side: "))
           t1=Triangle(side1,side2,side3)
           print(t1.getColor())
           print(t1.getPerimeter())
           print(t1.__str__())
       main()

当我在主函数中创建三角形对象 t1 时发生错误: init() 接受 1 到 3 个位置参数,但给出了 4 个...

我知道还有其他关于类似错误的帖子,但其中很多帖子是您提供的论据不足,而提供太多论据的帖子没有回答我的问题。

【问题讨论】:

标签: python


【解决方案1】:

你需要将__int__改为__init__,并且只传递super()self

class Triangle(GeometricObject):
       def __init__(self,side1=1.0,side2=1.0,side3=1.0):
           #The correct alternative to below is: 
           #super(GeometricObject, self).__init__()

           GeometricObject.__init__(self) 
           self.__side1=side1
           self.__side2=side2
           self.__side3=side3

为了回答你的第二个问题,这里有一个例子:

class A(object):
    def __init__(self, color = 'blue'):
        self.color = color

    def __str__(self):
        return str(self.color)

class B(A):
    def __init__(self, name = 'steve'):
        A.__init__(self)    
        self.name = name

    def __str__(self):
        #alternatively: return super(B, self).__str__() + " " + str(self.name) 
        return A.__str__(self) + " " + str(self.name)

打印"blue steve"

【讨论】:

  • 这似乎不起作用。所以唯一的变化是 super().__init__(self)?在我们在课堂上所做的示例中,我们不必提供 self 参数,这就是我感到困惑的原因。
  • 您还需要将__int__ 更改为__init__。同样,我也会使用GeometricObject.__init__(self),但这没关系。
  • :P 我没看到。谢谢你,沮丧后我的眼睛没有捕捉到这些东西..
  • @HughCraig 我做了一些更新以澄清...如果您认为我已经回答了您的问题,请您接受我的回答吗?
【解决方案2】:

Triangle 的 init 函数拼写错误为 __int__ :
def __int__(self,side1=1.0,side2=1.0,side3=1.0):

更改为:
def __init__(self,side1=1.0,side2=1.0,side3=1.0):

为我工作!

【讨论】:

  • 嘿,我现在得到了那个部分。但是我也遇到了一个没有意义的错误,因为我在上一个程序中做了它,现在它不让我这部分:'code'return super().__str__()+" side 1: "+str( self.__side1)+" side 2: "+str(self.__side2)+" side 3: "+str(self.__side3)'code' 它给了我这个错误:Can't convert 'Triangle' object to str implicitly
猜你喜欢
  • 2022-01-04
  • 1970-01-01
  • 2018-03-07
  • 2015-07-13
  • 1970-01-01
  • 2023-03-03
  • 2020-01-30
相关资源
最近更新 更多