如何扩展静态基础构造函数?

How to extend a static base constructor?

我正在使用 Python bitmap package

它几乎可以满足我的所有需求,但不适用于我的应用程序所需的十六进制值,因此我将其扩展如下:

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)

基础 class 有一个来自字符串的静态构造函数:

bitmap.BitMap.fromstring("01010101")

我可以将十六进制值转换为 bin:

bitmap.BitMap.fromstring(format(int("aa",16),"08b"))

但是 returned class 是原始位图 class 而不是扩展位图。

如何使用此构造函数,但仍然 return 我的扩展 class?

您可能无法 - 如果构造函数是静态的,而不是类方法,您将不得不完全覆盖旧的构造函数。当然,您可以在覆盖中调用旧的,将属性复制到新的子类实例,然后 return 如果您真的需要的话。

bitmap.BitMap.fromstringclass 方法 ,而不是 静态方法 ,但已被错误地实现作者。该行:

bm = BitMap(nbits)

真的应该

bm = cls(nbits)

在这种情况下,您可以在子class 上调用fromstring 并获得子class 的一个实例。您可以分叉回购协议,实现它并发出拉取请求以将其包含在包中(或者只是在您的包中使用您的叉子)。您还可以在他们的回购协议中提出问题,看看他们希望您如何继续。

或者,在您自己的子 class 中正确实施 fromstring 并隐藏损坏的基础 class 实施。