class
我在胡闹,目标是有一种方法来支持动态属性分配。
请暂时忘记糟糕的实现或者我为什么不使用字典
,我知道还有其他方法可以做到这一点(例如
Enum
)但这是我以前的测试代码,现在它成为我的探索,以找出为什么它不工作。
class Family(object):
def children(self):
return self.__dict__.values()
def __setitem__(self, key, value):
self.__dict__[key] = value
def __getitem__(self, item):
return self.__dict__[item]
def __repr__(self):
return str(self.__dict__)
def __iter__(self):
return self.__dict__.items()
foo = Family()
foo.a = 'foo'
foo.b = 'bar'
[i for i in foo]
现在预期的结果是
[('a', 'foo'), ('b', 'bar')]
TypeError: iter() returned non-iterator of type 'dict_items'
我想我可能把事情搞砸了
__iter__
方法,所以我检查如下:
type(foo.__iter__())
# <class 'dict_items'>
type(foo.__dict__.items())
# <class 'dict_items'>
[i for i in foo.__dict.__items()]
# [('a', 'foo'), ('b', 'bar')]
foo.__dict__.items() == foo.__iter__()
# True
如果它们都一样,为什么不呢
[i for i in foo]