我编写了一个类,用于以便捷的方式存储参数进行酸洗.它超载__setattr__以方便访问.它还使用列表来记住添加属性的顺序,以便迭代顺序可预测且不变.这里是:
class Parameters(object):
def __init__(self):
self._paramOrder = []
def __setattr__(self, name, value):
self._paramOrder.append(name)
object.__setattr__(self, name, value)
def __delattr__(self, name):
self._paramOrder.remove(name)
object.__delattr__(self, name)
def __iter__(self):
for name in self._paramOrder:
yield self.name
def iteritems(self):
for name in self._paramOrder:
yield name, self.name
Run Code Online (Sandbox Code Playgroud)
问题是__init__调用我的重载__setattr__以便添加_paramOrder到实例字典.有没有办法处理这个而不添加特殊情况__setattr__?
aar*_*ing 11
是.
让它打电话super(Parameters, self).__setattr__().
class Parameters(object):
def __init__(self):
super(Parameters, self).__setattr__('paramOrder', [])
# etc.
Run Code Online (Sandbox Code Playgroud)
或者我错过了什么?
另一种选择是直接去 __dict__
class Parameters(object):
def __init__(self):
self.__dict__['paramOrder'] = []
# etc.
Run Code Online (Sandbox Code Playgroud)
这应该有效,因为你没有压倒性的,__getattr__所以你可以在没有任何妨碍的情况下阅读它.