如何扩展静态基础构造函数?
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.fromstring
是 class 方法 ,而不是 静态方法 ,但已被错误地实现作者。该行:
bm = BitMap(nbits)
真的应该
bm = cls(nbits)
在这种情况下,您可以在子class 上调用fromstring
并获得子class 的一个实例。您可以分叉回购协议,实现它并发出拉取请求以将其包含在包中(或者只是在您的包中使用您的叉子)。您还可以在他们的回购协议中提出问题,看看他们希望您如何继续。
或者,在您自己的子 class 中正确实施 fromstring
并隐藏损坏的基础 class 实施。
我正在使用 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.fromstring
是 class 方法 ,而不是 静态方法 ,但已被错误地实现作者。该行:
bm = BitMap(nbits)
真的应该
bm = cls(nbits)
在这种情况下,您可以在子class 上调用fromstring
并获得子class 的一个实例。您可以分叉回购协议,实现它并发出拉取请求以将其包含在包中(或者只是在您的包中使用您的叉子)。您还可以在他们的回购协议中提出问题,看看他们希望您如何继续。
或者,在您自己的子 class 中正确实施 fromstring
并隐藏损坏的基础 class 实施。