首页 > 解决方案 > 如何使元组子类接受 2 个参数?

问题描述

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

class TupleObject(tuple):
    def __init__(self, property, _tuple):
        super().__init__(_tuple)
        self.property = property

_tuple = TupleObject(property, (0, 0))

抛出错误:

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

我怎样才能使这项工作?将这种精确方法与列表子类一起使用可以按预期工作。

标签: pythonpython-3.xooptuples

解决方案


因为元组是不可变的,所以您需要重写__new__才能在创建实例之前修改对象。

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')

推荐阅读