Python 如何使元组子类接受2个参数?

Python 如何使元组子类接受2个参数?,python,python-3.x,oop,tuples,Python,Python 3.x,Oop,Tuples,我创建了一个tuple子类来向tuple添加属性。使用与list子类相同的逻辑,该子类可以正常工作。 代码: 抛出错误: TypeError:元组最多需要1个参数,得到2个 我怎样才能做到这一点?对列表子类使用这种精确的方法正如预期的那样有效。因为元组是不可变的,所以需要重写\uuuuuu new\uuuuu,以便能够在创建实例之前修改对象 class TupleObject(tuple): def __new__(cls, property, _tuple): sel

我创建了一个tuple子类来向tuple添加属性。使用与list子类相同的逻辑,该子类可以正常工作。 代码:

抛出错误:

TypeError:元组最多需要1个参数,得到2个


我怎样才能做到这一点?对列表子类使用这种精确的方法正如预期的那样有效。

因为元组是不可变的,所以需要重写
\uuuuuu new\uuuuu
,以便能够在创建实例之前修改对象

class TupleObject(tuple):

    def __new__(cls, property, _tuple):
        self = super().__new__(cls, _tuple)
        self.property = property
        return self

_tuple = TupleObject('a prop', (0, 0))
_tuple, _tuple.property
产生

((0, 0), 'a prop')

因为元组是不可变的,所以您需要重写
\uuuuu new\uuuuu
,以便能够在创建实例之前修改对象

class TupleObject(tuple):

    def __new__(cls, property, _tuple):
        self = super().__new__(cls, _tuple)
        self.property = property
        return self

_tuple = TupleObject('a prop', (0, 0))
_tuple, _tuple.property
产生

((0, 0), 'a prop')

这个密码被破坏了;它将使
property
成为
TupleObject
的class属性,而不是实例属性,因为第一个参数是类本身,而不是要初始化的实例。您需要以
cls
的形式接收第一个参数(以避免混淆人们),然后执行:
self=super()。\uuuuu new\uuuuuuu(cls,\utuple)
self.property=property
返回self
@ShadowRanger谢谢,非常好的一点。此代码已被破坏;它将使
property
成为
TupleObject
的class属性,而不是实例属性,因为第一个参数是类本身,而不是要初始化的实例。您需要将第一个参数作为
cls
(以避免混淆人们),然后执行:
self=super()。\uuuuu new\uuuu(cls,\utuple)
self.property=property
返回self
@ShadowRanger谢谢,这一点很好。