如何将用户定义类的实例转换为tup

2024-04-26 10:14:39 发布

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

我想象了一个班级:

class Foo:
    def __init__(self, **values):
        self._value_tuple = tuple(values.items())

我希望能够使用内置构造函数将其转换为tuple

>>> foo = Foo(ham=1, eggs=2, spam=3)
>>> tuple(foo)
(('ham', 1), ('eggs', 2), ('spam', 3))

*我知道我可以通过实现像astuple()这样的方法来手动实现它。如果可能的话,我想通过调用tuple构造函数来实现它。你知道吗


Tags: selffooinitvaluedefitemsspameggs
1条回答
网友
1楼 · 发布于 2024-04-26 10:14:39

通过在类中定义__iter__()方法,可以实现所需的功能:

class Foo:
    def __init__(self, **values):
        self._value_tuple = tuple(values)

    def __iter__(self):
        return self._value_tuple.__iter__()
        # or return iter(self._value_tuple)


foo = Foo(ham=1, eggs=2, spam=3)
print(tuple(foo))

输出:

('ham', 'eggs', 'spam')

如果您想要(keys, values),您可以将您的项目存储在dict中:

class Foo:
    def __init__(self, **values):
        self._value_dict = values

    def __iter__(self):
        return iter(self._value_dict.items())


foo = Foo(ham=1, eggs=2, spam=3)
print(tuple(foo))

印刷品:

(('ham', 1), ('eggs', 2), ('spam', 3))

__iter__()Python Datamodel的一部分。当您在类中实现此方法时,所有期望iterable的函数和语法构造都将与您的类一起工作而不会发生更改,包括tuple()中的参数。你知道吗

相关问题 更多 >