我有一个假想的课:
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
构造函数来实现它。
答案 0 :(得分:3)
您可以通过在类中定义__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)
,则可以将项目存储在字典中:
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的一部分。当您在类中实现此方法时,所有期望可迭代的函数和语法构造都将无需更改就可以与您的类一起使用,其中包括tuple()
中的参数。