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

2024-05-16 12:40:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python^{} 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)

基类具有来自字符串的静态构造函数:

bitmap.BitMap.fromstring("01010101")

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

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

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

如何使用此构造函数但仍返回扩展类?你知道吗


Tags: importself功能应用程序formatpackagedefval
2条回答

^{}是一个类方法,不是一个静态方法,但是作者没有正确地实现它。线路:

bm = BitMap(nbits)

应该是真的

bm = cls(nbits)

在这种情况下,您可以调用子类上的fromstring,并获得子类的实例。您可以分叉repo,实现它并发出pull请求将其包含在包中(或者只在包中使用您的分叉)。你也可以就他们的回购提出问题,看看他们希望你怎么做。你知道吗

或者,在您自己的子类中正确地实现fromstring,并隐藏中断的基类实现。你知道吗

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

相关问题 更多 >