在Python中,继承元组类不能接受**kwargs

2024-09-27 23:16:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试继承一个可哈希iterable,比如元组。我还想拥有**kwargs形式的元数据,但是我得到了一个TypeError

在我添加**metadata之前:

class Collection(tuple):
    def __init__(self, pair):#, **metadata):
#         self.metadata = metadata
        self.pair = tuple(pair)
pair_1 = Collection(["Darth Plagueis", "Darth Sidious"])
pair_1   
# ('Darth Plagueis', 'Darth Sidious')

在我添加**metadata之后:

class Collection(tuple):
    def __init__(self, pair, **metadata):
        self.metadata = metadata
        self.pair = tuple(pair)
pair_1 = Collection(["Darth Plagueis", "Darth Sidious"], affiliation="Sith")
# ---------------------------------------------------------------------------
# TypeError                                 Traceback (most recent call last)
# <ipython-input-119-f40b020d268d> in <module>
#      11         self.metadata = metadata
#      12         self.pair = tuple(pair)
# ---> 13 pair_1 = Collection(["Darth Plagueis", "Darth Sidious"], affiliation="Sith")
#      14 pair_1
#      15 # ('Darth Plagueis', 'Darth Sidious')

# TypeError: tuple() takes at most 1 argument (2 given)
# ​

Tags: selfmostinitdefclasscollectionmetadatatuple
1条回答
网友
1楼 · 发布于 2024-09-27 23:16:29

要重写tuple类,需要将super初始化放在__new__方法中

class Collection(tuple):
    def __new__(self, pair, **metadata):
        return super(Collection, self).__new__(self,tuple(pair))
    def __init__(self, pair, **metadata):
        self.metadata = metadata
        self.pair = tuple(pair)
>>> pair_1 = Collection(["Darth Plagueis", "Darth Sidious"], affiliation="Sith")
>>> pair_1.pair
('Darth Plagueis', 'Darth Sidious')
>>> pair_1.metadata
{'affiliation': 'Sith'}

相关问题 更多 >

    热门问题