Python 如何扩展静态基构造函数?
我正在使用Python 它几乎完成了我需要的所有功能,但它不能处理十六进制值,这是我的应用程序所需要的,因此我对它进行了如下扩展:Python 如何扩展静态基构造函数?,python,static-constructor,Python,Static Constructor,我正在使用Python 它几乎完成了我需要的所有功能,但它不能处理十六进制值,这是我的应用程序所需要的,因此我对它进行了如下扩展: import bitmap class BitMap(bitmap.BitMap): def tohexstring(self): val = self.tostring() st = "{0:0x}".format(int(val,2)) return st.zfill(self.sz/4) 基类具有来自字
import bitmap
class BitMap(bitmap.BitMap):
def tohexstring(self):
val = self.tostring()
st = "{0:0x}".format(int(val,2))
return st.zfill(self.sz/4)
基类具有来自字符串的静态构造函数:
bitmap.BitMap.fromstring("01010101")
我可以用十六进制将十六进制值转换为二进制:
bitmap.BitMap.fromstring(format(int("aa",16),"08b"))
但返回的类是原始位图类,而不是扩展类
如何使用此构造函数但仍返回扩展类?您可能无法-如果构造函数是静态的,而不是类方法,则必须完全重写旧构造函数。当然,您可以在覆盖中调用旧的方法,将属性复制到新的子类实例中,并在需要时返回。是类方法,不是静态方法,但作者错误地实现了它。该行:
bm = BitMap(nbits)
应该是
bm = cls(nbits)
在这种情况下,您可以对子类调用fromstring
,并获取子类的实例。您可以分叉repo,实现它,并发出请求将其包含在包中(或者只在包中使用您的分叉)。你也可以在他们的回购协议上提出问题,看看他们希望你怎么做
或者,在您自己的子类中正确地实现
fromstring
,并隐藏已损坏的基类实现。为什么不在子类中为hex实现fromstring
?请注意,与超类同名可能并不理想。是的,我刚刚意识到这一点(在你在我的答案中指出它之前大约2秒钟)。令人遗憾的是,作者正确地使用了@classmethod
,但随后又错误地实现了它…@mgilson这看起来确实很奇怪-如果他们使用的是pylint
或其他东西,它会告诉他们实际上没有使用参数。