使用super()

我收到这样一个错误:GeometricObject的颜色和填充参数没有传递给Triangle对象,但是不确定为什么。我尝试了2种方法,更喜欢使用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)
sinochun 回答:使用super()

对于三角形,您需要在color中包含filled__init__,然后传递给super:

class Triangle(GeometricObject):
    def __init__(self,side1=1.0,side2=1.0,side3= 1.0,color=None,filled=None):
        super().__init__(color,filled)
        ...
本文链接:https://www.f2er.com/2953484.html

大家都在问