与其 Parent class 相比,是否不可能减少 Child Class 所需的参数?
Is it impossible to reduce the arguments needed for Child Class compared to its Parent class?
这是我第一次 post 来到这里,我是 python 的新手,很想学习。希望我这里的post对大家来说足够清楚了。
有没有人知道是否可以从其 parent 的继承中减少 child class 所需的参数?
示例如下:
# this is a code to estimate any polygon's perimeter (parent)
# the second one is code to estimate a square's area (child)
class RegularPolygon:
`def __init__(self,
no_of_sides=0,
side_length=0):`
`self.no_of_sides = no_of_sides`
`self.side_length = side_length`
`def perimeter(self):`
`perimeter = self.no_of_sides * self.side_length`
`return perimeter`
`class Square(RegularPolygon):`
`def __init__(self,
no_of_sides=4,
side_length=0):`
`super().__init__(no_of_sides, side_length)`
`def area(self):`
`area = self.side_length ** 2`
`return area`
我正在尝试调用 child class 并估算平方。因为它是一个正方形,它总是有 4 个边,所以 no_of_sides
= 总是 4。我正在考虑让它自动,因此我可以只用一个参数调用 class Square。
这是我对他们的期望:
`item = Square(5)`
`item.area()`
>>> 20
`item.perimeter()`
>>>20
我试着给他们的论点赋予基本价值(parent、child、parent&child),但仍然总是得到错误的结果。
到底有没有?
在这种情况下,最好完全删除那些 __init__
参数。
你的 Square
class 只需要接受它需要的参数 (side_length
),而不是让 class 的用户覆盖 no_of_sides
共 4 个
class Square(RegularPolygon):
def __init__(self, side_length):
super().__init__(no_of_sides=4, side_length=side_length)
每个class的构造函数可以有任何你想要的签名;只需确保子级使用适当的参数调用父级即可。
class RegularPolygon:
def __init__(self, no_of_sides, side_length):
self.no_of_sides = no_of_sides
self.side_length = side_length
def perimeter(self):
return self.no_of_sides * self.side_length
class Square(RegularPolygon):
def __init__(self, side_length):
RegularPolygon.__init__(self, 4, side_length)
这是我第一次 post 来到这里,我是 python 的新手,很想学习。希望我这里的post对大家来说足够清楚了。
有没有人知道是否可以从其 parent 的继承中减少 child class 所需的参数?
示例如下:
# this is a code to estimate any polygon's perimeter (parent)
# the second one is code to estimate a square's area (child)
class RegularPolygon:
`def __init__(self,
no_of_sides=0,
side_length=0):`
`self.no_of_sides = no_of_sides`
`self.side_length = side_length`
`def perimeter(self):`
`perimeter = self.no_of_sides * self.side_length`
`return perimeter`
`class Square(RegularPolygon):`
`def __init__(self,
no_of_sides=4,
side_length=0):`
`super().__init__(no_of_sides, side_length)`
`def area(self):`
`area = self.side_length ** 2`
`return area`
我正在尝试调用 child class 并估算平方。因为它是一个正方形,它总是有 4 个边,所以 no_of_sides
= 总是 4。我正在考虑让它自动,因此我可以只用一个参数调用 class Square。
这是我对他们的期望:
`item = Square(5)`
`item.area()`
>>> 20
`item.perimeter()`
>>>20
我试着给他们的论点赋予基本价值(parent、child、parent&child),但仍然总是得到错误的结果。 到底有没有?
在这种情况下,最好完全删除那些 __init__
参数。
你的 Square
class 只需要接受它需要的参数 (side_length
),而不是让 class 的用户覆盖 no_of_sides
共 4 个
class Square(RegularPolygon):
def __init__(self, side_length):
super().__init__(no_of_sides=4, side_length=side_length)
每个class的构造函数可以有任何你想要的签名;只需确保子级使用适当的参数调用父级即可。
class RegularPolygon:
def __init__(self, no_of_sides, side_length):
self.no_of_sides = no_of_sides
self.side_length = side_length
def perimeter(self):
return self.no_of_sides * self.side_length
class Square(RegularPolygon):
def __init__(self, side_length):
RegularPolygon.__init__(self, 4, side_length)