【问题标题】:Missing arguments from super class using super()使用 super() 从超类中丢失参数
【发布时间】:2019-12-08 14:52:25
【问题描述】:

我收到来自GeometricObject 的颜色和填充参数没有传递给Triangle 对象的错误,但不知道为什么。我尝试了两种方法,更喜欢使用super()

当我尝试通过用户输入获取Triangle 时,最后一行出现错误:

TypeError: __init__() takes from 1 to 4 positional arguments but 6 were given
import math
import sys

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 + \
            " and filled: "  + str(self.__filled)


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

    def get_side1(self):
        return self.__side1
    def set_side1(self, side1):
        self.__side1 = side1

    def get_side2(self):
        return self.__side2
    def set_side2(self, side2):
        self.__side2 = side2

    def get_side3(self):
        return self.__side3
    def set_side3(self, side3):
        self.__side3 = side3

    def get_area(self):
         p = self.get_perimeter() / 2
         area = math.sqrt(
            p *
            (p - self.__side1) *
            (p - self.__side2) *
            (p - self.__side3)
        )
         return area

    def get_perimeter(self):
        return self.__side1 + self.__side2 + self.__side


    def __str__(self): 
        info = "Triangle: side1 = {} side2 = {} side3 = {}".format(
            self.__side1, self.__side2, self.__side3
        )
        return info




if __name__ == "__main__":
    float_sides = []
    sides = input("Enter numeric values for sides 1, 2, and 3\
 separated by commas: ").split(",")
    try:
       for e in sides:
            float(e)
            float_sides.append(e)
    except:
        print("Invalid input, try again.")
        sys.ext()
    if len(float_sides) !=3:
        print("Invalid number of inputs, try again")
        sys.ext()

    side1 = float_sides[0]
    side2 = float_sides[1]
    side3 = float_sides[2]

    color = input('Enter color: ')
    filled = input('Enter 1 if triangle is filled or 0 if it is not: ')
    if filled not in (1,0):
        print("Invalid input, try again")
        #sys.ext()

    triangle = Triangle(side1, side2, side3, color, filled)

【问题讨论】:

  • 父类的__init__ 的参数不会被神奇地添加到您放入__init__ 的子类def 中的那些参数中(按什么顺序呢?)。如果你希望它有 5 个参数,你必须明确地说出来。

标签: python inheritance super


【解决方案1】:

您需要在三角形的__init__ 中包含colorfilled,然后传递给super:

class Triangle(GeometricObject):
    def __init__(self, side1=1.0, side2=1.0, side3= 1.0, color=None, filled=None):
        super().__init__(color, filled)
        ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多