Python继承: create child object in parent class

标签 python inheritance

我有一个父类,它有一个返回新对象的方法。我希望该对象与 self 具有相同的类型(即,如果在 Parent 类中调用,则为 Parent,如果在 Child 实例中调用,则为 Child)。

class Parent(object):
    def __init__(self,param):
        self.param = param

    def copy(self):
        new_param = some_complicated_stuff(self.param)
        return Parent(new_param)

class Child(Parent):
    pass

C = Child(param)
D = C.copy()

此处,无论 C 类如何,D = C.copy() 都将是 Parent 类型。我想让 copy 返回与 C 相同的类的实例,同时将“some_complicated_stuff”部分保留在父类中以避免代码重复。

上下文:Parent是一个抽象的组结构,“复制”返回子组(进行一系列代数运算),并且我有许多不同的Child类使用此方法。

最佳答案

您可以利用以下事实:每个实例在 __class__ 下都有一个指向其类的指针:

class Parent(object):
    def __init__(self,param):
        self.param = param

    def copy(self):
        new_param = some_complicated_stuff(self.param)
        return self.__class__(new_param)

这将是上述类的Parent,但在派生类中将是Child

除了 self.__class__,您还可以使用 type(self),如 @Eli Korvigo曾说过in the comments ,或如前所述here .

关于Python继承: create child object in parent class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48626989/

相关文章:

android - 如何使用 ORMLite 正确注释继承类?

JavaScript-使用对象的方法从父数组中删除对象

python - Django数据库: how to filter objects based on other object's field?

python - 使用 Jinja2 的 HTML 模板 - 丢失

python - 如何解决 Django 中的这些 Python 错误?

java - Java中如何拥有动态数据类型的变量?

C++ 表达式模板——为什么是基类?

python - 直接使用 QtMultimedia.QAudioOutput 播放 gtts 缓冲区

python - 我的 tensorflow keras 模型每次预测总是给出 1.0。它无法正常工作

inheritance - 如何在 typescript 的基类中创建相同类型的实例