我计划编写一个小类来托管一些内容和相关的辅助方法。虽然在这种情况下从namedtuple
继承并没有太大意义,但我出于习惯而这样做。
class Conf(collections.namedtuple('Conf', 'data')):
def __getitem__(self, attr):
return self.data[attr]
def get(self, attr, default=None):
return self.data.get(attr, default)
然而,当我正确地调用 .get()
时,这会触发对于 __getitem__
的无限递归,导致其反复调用自身!例如这样:
Conf({}).get('')
-> RuntimeError: maximum recursion depth exceeded while calling a Python object
为什么看起来外部成员的方法被重写了,而我所做的只是将data
保持在API之外。另一方面,以下内容运作正常。
class Config(object):
def __init__(self, d):
self.data = d
def __getitem__(self, attr):
return self.data[attr]
def get(self, attr, default=None):
return self.data.get(attr, default)
dict
类呢?像这样写class Config(dict): pass
,就可以实现你所需的所有功能了。 - Dan D.