类需要实现什么才能用作参数元组?

时间:2014-06-10 15:20:05

标签: python arguments

我希望能够做到以下

之类的事情
class C(object):
     # I store a series of values in some way
     # what do I need to implement to act like an array of arguments


c=C()
result=f(*c)

*“运算符”在此用法中对实例调用了什么?

3 个答案:

答案 0 :(得分:3)

使用*运算符时,有两种方法可以控制>>> class C(object): ... def __init__(self, lst): ... self.lst = lst ... def __iter__(self): ... return iter(self.lst) ... >>> def f(a, b, c): ... print "Arguments: ", a, b, c ... >>> c = C([1, 2, 3]) >>> f(*c) Arguments: 1 2 3 >>> 运算符的行为:

  1. 重载__iter__ special method

    >>> class C(object):
    ...     def __init__(self, lst):
    ...         self.lst = lst
    ...     def __getitem__(self, key):
    ...         return self.lst[key]
    ...
    >>> def f(a, b, c):
    ...     print "Arguments: ", a, b, c
    ...
    >>> c = C([1, 2, 3])
    >>> f(*c)
    Arguments:  1 2 3
    >>>
    
  2. 重载__getitem__ special method

    {{1}}

答案 1 :(得分:1)

人们调用此"positional expansion“或参数解包。您的实例应提供__iter__方法,在迭代此对象时调用。但是,我认为最干净的方法是子类{{ 3}},这是Python中所有迭代的抽象基类。

请注意,collections.Iterable与关键字参数解包相同,需要将对象作为映射。

编辑:在这种情况下,我仍然试图找到确切的实现,以查看用于解包的C API调用。这将得出这个问题的准确答案。有什么指针吗?

答案 2 :(得分:1)

您可以采用的一种方法是继承tuplelist