我正在尝试创建一个基于 的简单派生类str
,并添加一个实例变量flag
. 由于我不明白的原因,如果我尝试将标志传递给构造函数,则会收到错误消息:
>>> class Strvalue(str):
def __init__(self, content, flag=None):
str.__init__(self, content)
self.flag = flag
>>> Strvalue("No problem")
'No problem'
>>> Strvalue("Problem", flag=None)
Traceback (most recent call last):
File "<pyshell#113>", line 1, in <module>
Strvalue("Problem", flag=None)
TypeError: str() takes at most 1 argument (2 given)
我已经检查过,在成功的调用中,Strvalue
构造函数确实被调用了——我没有输入错误__init__
或类似的东西。那么发生了什么?
编辑:根据这个问题(和@Martijn 的回答),这个问题也可以通过覆盖来避免__new__
。问题是为什么会这样。