我希望能夠像做以下一個類需要實現什麼才能用作參數元組?
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)
什麼是*
「經營者」在這種用法實例調用?
我希望能夠像做以下一個類需要實現什麼才能用作參數元組?
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)
什麼是*
「經營者」在這種用法實例調用?
有兩種方法來控制*
運營商的行爲,當它被用於這樣的:
>>> 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
>>>
超載的__getitem__
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
>>>
人們稱之爲"positional expansion「或參數解包。您的實例應提供__iter__
方法,該方法在迭代此對象時調用。不過,我認爲最簡潔的方法是子類collections.Iterable
,它是Python中所有迭代的抽象基類。
請注意,this是關鍵字參數解包的相同問題,要求該對象爲映射。
編輯:我仍然試圖找到確切的實現在這種情況下,看看哪些C API調用是用於解包。這將產生這個問題的確切答案。任何指針?
您可以執行此操作的一種方法是子類tuple
或list
。
一個序列對象也可以工作(實現'__getitem__')。 –