当使用某些参数调用父类(super class)时,我试图强制使用更专业的类。具体来说,我有一个 Monomial
类(其 __init__
采用 coef
ficient 和 power
)和一个 常量
类。我希望每当使用 power=0
调用 Monomial
时,都会返回一个 Constant
实例。
这些类的目的是构建用于生成“随机”数学函数的框架。
我最初拥有的:
class Monomial(Function):
def __init__(self, coef: int, power: int, inner=Identity()):
super().__init__(inner)
self.pow = power
self.coef = coef
class Constant(Monomial):
def __init__(self, c: int):
super().__init__(c, 0)
我尝试添加以下 __new__
方法:
class Monomial(Function):
def __new__(cls, coef: int, power: int, inner=Identity()):
if power == 0:
return Constant(coef)
instance = object.__new__(Monomial)
instance.__init__(coef, power, inner)
return instance
问题是,现在无论何时创建新的Constant
,都会调用Monomial
的__new__
方法(签名不匹配) .
执行此操作的最佳方法是什么?
最佳答案
如何使用工厂方法
方法?当应该动态定义确切的实例类型时,这是一个不错的选择。看起来像:
class Monomial(Function):
@staticmethod
def create(coef: int, power: int, inner=Identity()):
if power == 0:
return Constant(coef)
else:
return Monomial(coef, power)
x = Monomial.create(...)
关于python - 强制使用专门的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53915703/