Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何扩展静态基构造函数?_Python_Static Constructor - Fatal编程技术网

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

Python 如何扩展静态基构造函数?,python,static-constructor,Python,Static Constructor,我正在使用Python 它几乎完成了我需要的所有功能,但它不能处理十六进制值,这是我的应用程序所需要的,因此我对它进行了如下扩展: 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) 基类具有来自字

我正在使用Python

它几乎完成了我需要的所有功能,但它不能处理十六进制值,这是我的应用程序所需要的,因此我对它进行了如下扩展:

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")
我可以用十六进制将十六进制值转换为二进制:

bitmap.BitMap.fromstring(format(int("aa",16),"08b"))
但返回的类是原始位图类,而不是扩展类


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

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

是类方法,不是静态方法,但作者错误地实现了它。该行:

bm = BitMap(nbits)
应该是

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


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

为什么不在子类中为hex实现
fromstring
?请注意,与超类同名可能并不理想。是的,我刚刚意识到这一点(在你在我的答案中指出它之前大约2秒钟)。令人遗憾的是,作者正确地使用了
@classmethod
,但随后又错误地实现了它…@mgilson这看起来确实很奇怪-如果他们使用的是
pylint
或其他东西,它会告诉他们实际上没有使用参数。