添加类成员变量时如何避免重写派生类?

时间:2019-06-09 20:28:10

标签: python-3.x oop

当我想向基类添加成员变量时遇到修改类层次结构的问题,这需要在派生类中重写构造函数。

例如,我有这样的东西:

class Animal:
    ___init___(self,animal_name):
        self.name = animal_name
class Cat(Animal):
    ___init__(self,animal_name,animal_pattern):
         self.pattern = animal_pattern
         super().__init__(self,animal_name)

现在,假设我将“ age”成员变量添加到类Animal中:

class Animal:
    ___init___(self,animal_name,animal_age):
        self.name = animal_name
        self.age = animal_age
class Cat(Animal):
    ___init__(self,animal_name,animal_age,animal_pattern):
         self.pattern = animal_pattern
         super().__init__(animal_name,animal_age)

此更改要求我在animal_age的构造函数中添加Cat作为参数。如果派生类的层次结构包含许多类,这将很快变得乏味且容易出错。无论在语言功能还是设计思想上,都有办法避免这种重写吗?

1 个答案:

答案 0 :(得分:1)

我理解为什么它看起来很乏味,但是没有办法解决。每个子类都必须具有必需的参数才能传递给其父类。如果不是这种情况,那也将很烦人。假设您不必显式键入animal_nameanimal_age。现在,创建Cat实例的人很难知道需要哪些参数。当前,您在Cat中可以看到所有必需的参数。

您可以使用*argv功能,但这只会使您的代码非常混乱。