0

我正在使用 Pythonbitmap

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

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")

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

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

但返回的类是原始位图类,而不是扩展类。

如何使用此构造函数但仍返回我的扩展类?

4

2 回答 2

2

bitmap.BitMap.fromstring类方法,不是静态方法,只是作者实现的不对。该行:

bm = BitMap(nbits)

真的应该

bm = cls(nbits)

在这种情况下,您可以调用fromstring您的子类并获取子类的实例。您可以分叉存储库,实现它并发出拉取请求以将其包含在包中(或仅在包中使用您的分叉)。您还可以在他们的回购中提出问题,看看他们希望您如何继续。

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

于 2015-10-27T16:32:12.507 回答
0

您可能无法 - 如果构造函数是静态的,而不是类方法,则必须完全覆盖旧的构造函数。当然,您可以在覆盖中调用旧的,将属性复制到新的子类实例,并在您确实需要时将其返回。

于 2015-10-27T16:27:19.520 回答