Python 如何使元组子类接受2个参数?
我创建了一个tuple子类来向tuple添加属性。使用与list子类相同的逻辑,该子类可以正常工作。 代码: 抛出错误: TypeError:元组最多需要1个参数,得到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
我怎样才能做到这一点?对列表子类使用这种精确的方法正如预期的那样有效。因为元组是不可变的,所以需要重写
\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谢谢,这一点很好。