我正在尝试创建一个tuple
的子类,它在各个方面的行为都像一个普通的tuple
一样,只是我用一个字符串初始化它,这个字符串首先被构造函数自动拆分(我也希望它的__str__()
再次加入这个类,但这不是这里的问题)。你知道吗
我以为这是直截了当的,就这样试着:
class C(tuple):
def __init__(self, text):
super(C, self).__init__(text.split(':'))
def __str__(self):
return '[%s]' % ':'.join(self)
c = C('one:two:three') # I expect this to be like ('one', 'two', 'three')
因此,我尝试传递一个text
(a str
),拆分它并用结果调用我的超类的构造函数。我希望得到一个类似于tuple([ 'one', 'two', 'three' ])
的结果,即一个单词元组:('one', 'two', 'three')
。你知道吗
但是我得到了一个字符元组,也就是说,对于输入'one:two:three'
,我得到了一个('o', 'n', 'e', ':', 't', 'w', 'o', ':', 't', 'h', 'r', 'e', 'e')
,这正是我调用tuple('one:two:three')
时得到的结果。你知道吗
我对这种情况进行了调试,发现我的代码得到了正确的执行(调用了我的__init__()
,并用正确的值调用了另一个__init__()
)。我还尝试用一个具体的tuple.__init__(self, text.split(':'))
来替换super
构造,但这并没有改变任何事情。我还尝试传递一个tuple
而不是split()
创建的list
,同样没有变化。实际上,调用super的__init__()
似乎没有任何效果。解释器仍然使用我最初传递的字符串初始化元组。你知道吗
我错过什么了吗?为什么这不能像预期的那样工作?我如何创建一个类C
,它是tuple
的一个子类,我可以通过调用C('one:two:three')
来初始化它,以获得一个C
的实例,它是一个类似('one', 'two', 'three')
的元组?你知道吗
由于元组是不可变的,请使用
__new__
而不是__init__
:相关问题 更多 >
编程相关推荐