我正在使用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)
基类有一个来自string的静态构造函数:
bitmap.BitMap.fromstring("01010101")
我可以用十六进制格式将十六进制值转换为bin:
bitmap.BitMap.fromstring(format(int("aa",16),"08b"))
但返回的类是原始的位图类,而不是扩展的类。
如何使用此构造函数但仍返回扩展类?
答案 0 :(得分:2)
bitmap.BitMap.fromstring
是一个类方法,而不是静态方法,但作者已经错误地实现了它。这一行:
bm = BitMap(nbits)
应该是
bm = cls(nbits)
在这种情况下,您可以在子类上调用fromstring
并获取子类的实例。你可以分叉回购,实现它并发出一个拉请求,让它包含在包中(或者只是在你的包中使用你的fork)。你也可以在他们的回购中提出一个问题,看他们如何选择继续。
或者,在您自己的子类中正确实现fromstring
并隐藏破坏的基类实现。
答案 1 :(得分:0)
您可能无法 - 如果构造函数是静态的,而不是classmethod,则必须完全覆盖旧的构造函数。当然,您可以在覆盖中调用旧的,将属性复制到新的子类实例,如果确实需要,则返回该属性。