Python如何扩展`str`并重载其构造函数?

时间:2015-05-05 05:42:54

标签: python string class python-2.7 overloading

我有一系列字符,如果你愿意,我会有一个字符串,但我想存储有关字符串原点的元数据。另外,我想提供一个简化的构造函数。

我尝试过尽可能多的方式扩展str课程,就像Google为我解决的那样。当我来到这里时,我放弃了;

class WcStr(str):
    """wc value and string flags"""

    FLAG_NIBBLES = 8 # Four Bytes

    def __init__(self, value, flags):
        super(WcStr, self).__init__()
        self.value = value
        self.flags = flags

    @classmethod
    def new_nibbles(cls, nibbles, flag_nibbles=None):
        if flag_nibbles is None:
            flag_nibbles = cls.FLAG_NIBBLES

        return cls(
            nibbles[flag_nibbles+1:],
            nibbles[:flag_nibbles]
        )

当我将这两个参数注释掉@classmethod' s cls()时,它会给我这个错误:

TypeError: __init__() takes exactly 3 arguments (1 given)

非常典型,错误的args错误数,

使用另外两个参数(例如,如示例代码所示):

TypeError: str() takes at most 1 argument (2 given)

我已经尝试更改__init__的args,super().__init__的args,似乎都没有改变蚂蚁。

只有一个参数传递给cls(...)调用,正如str类的错误所要求的那样,我得到了这个:

TypeError: __init__() takes exactly 3 arguments (2 given)

所以我不能在这里取胜,出了什么问题?

这应该是第二篇文章,但str的原始字符串值会被放入什么属性?我想尽可能少地重载str类,以便将这些元数据添加到构造函数中。

1 个答案:

答案 0 :(得分:0)

而不是__init__尝试新的:

def __new__(cls, value, flags):    
    obj = str.__new__(cls, value)
    obj.flags = flags
    return obj