Python: перегрузка возможностей множественного назначения кортежей?

Итак, я создал свой собственный класс именованных кортежей на основе dict:

class t(dict):
   def __getattr__(self, v):
      try:
         return self[v]
      except KeyError:
         raise AttributeError("Key " + str(v) + " does not exist.")
   def __init__(self, *args, **kwargs):
      for source in args:
         for i, j in source.items():
            self[i] = j
      for i, j in kwargs.items():
         self[i] = j

>>> thing = t(cow=10, moo='moooooooo')
>>> thing.cow
10
>>> thing.moo
'moooooooo'

Смысл использование dict - это то, что я могу использовать оператор ** splat, а также чтобы все это можно было json'd как dict. Двойной цикл for в init таков, что я могу сразу восстановить его из dict после десериализации .

Единственное, что мне не хватает, - это то, что вы можете делать с кортежами с несколькими присваиваниями, например

>>> thing = (1, 3, ('blargh', 'mooo'))
>>> a, b, (c, d) = thing
>>> a
1
>>> b
3
>>> c
'blargh'
>>> d
'mooo'

Можно ли каким-то образом добиться такого поведения с моим собственным типом данных? может переопределить или какой-то класс, от которого я могу наследовать, чтобы получить такое поведение?

9
задан Li Haoyi 19 August 2011 в 05:31
поделиться