我不知道该如何表达这个问题。我在下面创建了一个最小工作示例:
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))
,而不必重写该方法并对其进行硬编码。有办法吗?
答案 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>