在Python中,使用静态方法实现抽象方法的优缺点是什么?
例如,
import numpy as np
class ExponentialFamily:
@abstractmethod
def log_normalizer(self, q):
raise NotImplementedError
class Multinomial(ExponentialFamily):
@staticmethod
def log_normalizer(q):
max_q = np.maximum(0.0, np.amax(q))
q_minus_max_q = q - max_q
return max_q + np.logaddexp(-max_q, np.logaddexp.reduce(q_minus_max_q))
class NegativeBinomial(ExponentialFamily):
def __init__(self, r):
super().__init__()
self.r = r
def log_normalizer(self, q):
return -self.r * np.log1p(-mf.exp(q))
一方面,我知道pylint会抱怨没有使用self
。另一方面,在这里使用staticmethod似乎很奇怪。
在合作多重继承的情况下,我不能使用static方法,因为我至少需要真正的类型来调用super,而超类可能需要self
对象。但是,这不是这种情况。
在纯粹的OOP观点上,用静态方法覆盖普通方法只是异端。但是由于Python处理方法的方式,语言完全允许它。
我会尝试一个pro / con列表:
优点:
缺点: