与父类相比,是否不可能减少子类所需的参数?

2024-09-30 16:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我在这里的第一篇文章,我是python新手,很高兴学习。我希望我在这里的帖子对每个人都足够清晰

有人知道是否有可能从父类继承中减少子类所需的参数吗

下面是一个例子:

# 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`

我试着给孩子们打电话,估计平方。因为它是正方形,所以它总是有4条边,所以no_of_sides=总是4条边。我正在考虑将其自动化,因此我可以只使用一个参数调用类Square

以下是我对他们的期望:

    `item = Square(5)`
    `item.area()`
>>> 20
    `item.perimeter()`
>>>20

我试着给他们的论点赋予基本的价值(父母、孩子、父母和孩子),但总是得到错误的结果。 还有吗


2条回答

在这种情况下,最好将这些__init__参数一起删除

你的Square类只需要接受它所需要的参数(side_length),而不是让类的用户重写4的no_of_sides

class Square(RegularPolygon):
   def __init__(self, side_length):
      super().__init__(no_of_sides=4, side_length=side_length)

每个类的构造函数可以有您想要的任何签名;只需确保孩子使用适当的参数调用家长即可

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)

相关问题 更多 >