2
我有一个父类,我想保留其子类的所有实例的注册表(以字典的形式)。很简单,但我希望注册表根据其键进行排序,这是初始化时两个子类的参数。这是我的代码简化形式:OrderedDict不会在一个类中排序
from collections import OrderedDict
class Parent:
_registry = OrderedDict()
def __init__(self):
# add each sub-class instance to the registry & sort the registry
self._registry.update({self._num:self})
self._registry = OrderedDict(sorted(self._registry.items()))
class Foo(Parent):
def __init__(self, number):
self._num = number
Parent.__init__(self)
# then do some stuff
class Bar(Parent):
def __init__(self, number):
self._num = number
Parent.__init__(self)
# then do some other stuff
...
但是,虽然注册表使用新的子类对象更新自身,但它不会自行排序。
>>> a = Foo(3)
>>> Parent._registry # check to see if a was added to the registry
OrderedDict([(3, <Foo instance at 0x00A19C0C8>)])
>>> b = Bar(1)
>>> Parent._registry # check to see if b was inserted before a in the registry
OrderedDict([(3, <Foo instance at 0x00A19C0C8>), (1, <Bar instance at 0x00A19C1C8>)])
b
进来注册表a
后!
如果我在IPython的控制台做手工,它的工作原理:
>>> Parent._registry = OrderedDict(sorted(Parent._registry.items()))
OrderedDict([(1, <Bar instance at 0x00A19C1C8>), (3, <Foo instance at 0x00A19C0C8>)])
为什么不会是那种本身?我需要它,因为以后,事情必须发生在这些对象上,严格按照他们的number
参数。
啊感谢。掌握OOP ... – binaryfunt 2014-11-03 22:56:06
我有类似注册表的另一个问题,你认为你可以看看吗? http://stackoverflow.com/questions/26726609/function-wont-sucessfully-loop-over-class-instances-unless-contents-entered-man – binaryfunt 2014-11-04 02:10:21
划痕,没想到有人回答如此之快 – binaryfunt 2014-11-04 02:16:03