【发布时间】:2017-04-24 10:24:56
【问题描述】:
我有一个抽象类ship。
from abc import ABC, abstractmethod
class ship(ABC):
def __init__(self):
...
@abstractmethod
def do_stuff(self,stuff,things):
pass
我有多个继承自它的类(destroyer、cruiser、patrol_boat 等...)
class carrier(ship):
def __init__(self):
....
def do_stuff(self,stuff,things):
....
目前,如果我要添加,假设 def do_more_stuff(self): 到 ship
class ship(ABC):
def __init__(self):
...
@abstractmethod
def do_stuff(self,stuff,things):
pass
@abstractmethod
def do_more_stuff(self,stuff,things):
pass
在我将它们重新输入到控制台之前,这些更改不会影响任何子类。我该如何更改?
【问题讨论】:
-
你需要提供足够的代码来展示你实际做了什么 (MVCE)。编辑超 class 以添加新方法应该可以工作(在定义子类之后这样做效率有点低,但并非不合理),但我怀疑你错误地编辑了 instances i>,或者根本不编辑课程。
-
我觉得我在重新定义
ship,同时让剩余的类继承ship的先前定义。如何在不重新输入整个块的情况下向ship添加函数? -
重新定义整个类而不改变子类继承的内容是正确的。我的回答涵盖了这里的细节;有一种方法适用于非抽象方法,但抽象方法不能使用这种技术。
标签: python class inheritance abstract abc