, когда вы возвращаете буфер, тогда как он действует как указатель на первое местоположение массива, чтобы он возвращал свой адрес. И там, где вы вызываете функцию, вы можете сделать указатель на символ, который будет хранить этот возвращаемое значение адреса. После этого вы можете переместить указатель и получить доступ ко всем элементам вашего массива.
Будет достаточно методов __getitem__()
и keys()
:
>>> class D:
def keys(self):
return ['a', 'b']
def __getitem__(self, key):
return key.upper()
>>> def f(**kwds):
print kwds
>>> f(**D())
{'a': 'A', 'b': 'B'}
Если вы пытаетесь создать сопоставление - не просто удовлетворяете требованиям для передачи функции - тогда вы действительно должны наследовать от collections.Mapping
. Как описано в документации , вам нужно реализовать только:
__getitem__
__len__
__iter__
. Mixin выполнит для вас все остальное: __contains__
, keys
, items
, values
, get
, __eq__
и __ne__
.