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

2024-05-29 02:11:14 发布

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

我想做如下的事情

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)

在这种用法中,*“操作符”对实例调用什么?你知道吗


Tags: oftostoreinobjectsomeimplementneed
3条回答

人们称之为"positional expansion“或参数解包。您的实例应该提供一个__iter__方法,在迭代这个对象时调用它。然而,我认为最干净的方法应该是子类^{},它是Python中所有iterable的抽象基类。你知道吗

注意,this对于关键字参数解包来说是相同的问题,要求对象是映射。你知道吗

Edit:我仍在试图找到本例中的确切实现,以查看哪个C API调用用于解包。这将得出这个问题的确切答案。有什么建议吗?你知道吗

一种方法是将tuplelist子类化。你知道吗

有两种方法可以控制*操作符在这样使用时的行为:

  1. 重载^{} special method

    >>> 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
    >>>
    
  2. 重载^{} 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
    >>>
    

相关问题 更多 >

    热门问题