Python在类继承安全内重新创建实例

时间:2018-08-06 10:54:05

标签: python python-3.x class oop

我不知道该如何表达这个问题。我在下面创建了一个最小工作示例:

import math


class MyClass:
    def __init__(one, two):
        self.one = one
        self.two = two

    def to_logarithm():
        return MyClass(self.one, math.log(self.two))


class MyChildClass(MyClass):

    def __init__(one, two):
        super().__init__(one, two)

在上面的示例中,我有一个名为MyClass的父类,该类具有一个名为to_logarithm的方法。此方法只是重新创建该类的实例,但带有参数two的日志。

然后,我有一个从MyClass继承的子类,因此它也继承了方法to_logarithm。但是,如果我运行该方法,我当然会得到一个MyClass实例。我想做的是,每个孩子(具有不同的行为)基本上都会创建一个实例,只是带有日志值。也就是说,如果我调用MyChildClass.to_logarithm(),我将基本上得到MyChildClass(self.one, math.log(self.two)),而不必重写该方法并对其进行硬编码。有办法吗?

1 个答案:

答案 0 :(得分:3)

使用self.__class__。这将是当前实例的类对象。

您的原始代码也缺少一些self

import math

class MyClass:
    def __init__(self, one, two):
        self.one = one
        self.two = two

    def to_logarithm(self):
        return self.__class__(self.one, math.log(self.two))


class MyChildClass(MyClass):
    pass


print(MyClass(1, 5).to_logarithm())
print(MyChildClass(1, 5).to_logarithm())

打印出

<__main__.MyClass object at 0x10b7c15c0>
<__main__.MyChildClass object at 0x10b7b8550>