Python中的继承,需要在子类中定义某些方法

问题描述 投票:0回答:2

例如,在 Java 中,您可以使用某些方法来创建类 MyClass,这些方法是指定的,但未在 MyClass 中实现,但是 必须在继承自 MyClass 的任何类 MySubClass 中实现。所以基本上你想要的所有子类之间都有一些通用的功能,所以你把它放在 MyClass 中,并且每个子类都有一些独特的(但必需的)功能,所以你想要它在每个子类中。 如何在 Python 中实现这种行为?

(我知道有一些简洁的术语可以描述我的问题,所以请随时让我知道这些术语是什么以及如何更好地描述我的问题。)

python oop inheritance
2个回答
4
投票

一个非常基本的示例,但

abc
文档提供了更多内容

import abc

class Foo():
    __metaclass__ = abc.ABCMeta
    @abc.abstractmethod
    def bar(self):
        raise NotImplemented

class FooBar(Foo):
    pass

f = FooBar()
TypeError: Can't instantiate abstract class FooBar with abstract methods bar

编辑: 在 Python3 中,语法略有不同:

import abc

class Foo(object, metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def bar(self):
        raise NotImplementedError

class FooBar(Foo):
    pass

f = FooBar()

3
投票

您不能以编译时中断的方式要求在子类中实现方法,但是在基类上编写必须在子类中实现的方法的约定是引发

NotImplementedError

类似这样的:

class MyBase(object):
    def my_method(self, *args, **kwargs):
        raise NotImplementedError("You should implement this method on a subclass of MyBase")

然后你的子类可以实现

my_method
,但这只有在调用该方法时才会中断。如果您有全面的单元测试(您应该这样做),这不会是问题。

© www.soinside.com 2019 - 2024. All rights reserved.