我有一系列字符,如果你愿意,我会有一个字符串,但我想存储有关字符串原点的元数据。另外,我想提供一个简化的构造函数。
我尝试过尽可能多的方式扩展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类,以便将这些元数据添加到构造函数中。
答案 0 :(得分:0)
而不是__init__
尝试新的:
def __new__(cls, value, flags):
obj = str.__new__(cls, value)
obj.flags = flags
return obj