【发布时间】: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