当我想向基类添加成员变量时遇到修改类层次结构的问题,这需要在派生类中重写构造函数。
例如,我有这样的东西:
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
作为参数。如果派生类的层次结构包含许多类,这将很快变得乏味且容易出错。无论在语言功能还是设计思想上,都有办法避免这种重写吗?
答案 0 :(得分:1)
我理解为什么它看起来很乏味,但是没有办法解决。每个子类都必须具有必需的参数才能传递给其父类。如果不是这种情况,那也将很烦人。假设您不必显式键入animal_name
和animal_age
。现在,创建Cat
实例的人很难知道需要哪些参数。当前,您在Cat
中可以看到所有必需的参数。
您可以使用*argv
功能,但这只会使您的代码非常混乱。