【发布时间】:2020-04-04 17:55:57
【问题描述】:
我有一个父类,我想“强制”从它继承的每个人都实现一些特定的类属性。
我对方法没有这个问题,因为我创建了一个引发NotImplementedError 的虚拟方法,这很清楚。
至于类属性——我不想在父类中创建它们并将它们设置为 None,因为这不会强制开发人员在子类中实现它们。
演示当前情况的小代码:
class Pet(object):
name = None
def make_noise(self):
raise NotImplementedError("Needs to implement in subclass")
def print_my_name(self):
print(self.name)
class Dog(Pet):
# how to force declairing "name" attribute for subclasses?
def make_noise(self):
print("Whof Whof")
在此示例中,开发人员 1 创建了 Pet 类并希望其他开发人员实现具有“名称”属性的子类。 Developer2 实现了一个子类,但不知道他需要实现“name”属性。
是否可以在python中创建这样的限制?
【问题讨论】:
-
参见 docs.python.org/3/library/abc.html ,向下滚动到文档以了解 abstractmethod。
-
我觉得 name 应该与 object 相关,如果是这样,你可以这样做 .__init__(name)... 如果你想让一些 doc 将 dog 描述为一种类型,你可以使用 .__doc__/ .__str__/.__repr__ .etc
-
@ShengZhuang,是的,我倾向于同意,我想我没有那样做,因为在我的情况下,叶子类(狗)不是父类(宠物)的直接子类,所以我不想在所有其他父母的 init 中“拖动”那个变量,但实际上为什么不呢?
标签: python inheritance interface