gpt4 book ai didi

python - 如何只允许特定类的元素成为可迭代的元素(对于自定义类)

转载 作者:太空宇宙 更新时间:2023-11-04 00:32:29 25 4
gpt4 key购买 nike

在我的例子中,我想定义一个自定义类(称为 WordTuple),它是元组类的子类。此自定义元组的元素必须全部属于另一个自定义类(称为 Word)。

我知道这个问题(How to make an iterable class in Python in which only a specific type is allowed to be the element?)是相似的,但答案不是我要找的,我也不是很清楚。

class Word(str):
pass

class WordTuple(tuple):
# Here whatever is necessary for the elements of this particular tuple
# to be all members of the class 'Word'
pass

最佳答案

因为元组是不可变的,所以您只需要在创建元组时验证对象。您可以在自定义中执行此操作 __new__ method :

class WordTuple(tuple):
def __new__(cls, *objs):
if not all(isinstance(o, Word) for o in objs):
raise TypeError('WordTuple can only contain Word instances')
return super().__new__(cls, objs)

演示:

>>> WordTuple('a', 'b')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __new__
TypeError: WordTuple can only contain Word instances
>>> WordTuple(Word('a'), Word('b'))
('a', 'b')

关于python - 如何只允许特定类的元素成为可迭代的元素(对于自定义类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45267132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com