Class的Defaultdict - 获取类中当前被调用实例的索引/键

时间:2015-10-04 10:30:21

标签: python

是的!我知道你无法理解标题。
以下面的代码为例。

class Room(object):
    def __init__(self):
        self.numbers = []
        self.identify = None #for now?
    def getRoom(self):
        #here I need to implement so that, 
        # self.identify is current indent this class is called!
        return self.identify
room = defualtdict(Room)
print room['Train'].getRoom()
print room['Hospital'].getRoom()

例外输出。

#>>Train
#>>Hospital

defaultdict支持任何此类功能,以便我可以这样做? 一旦在课堂上调用了房间'某事'的类,我就需要一个代码,这样,自我房间就是所谓的“东西”!

1 个答案:

答案 0 :(得分:6)

collections.defaultdict(任何可调用的)的默认工厂不接受参数。

  

如果default_factory不是,则调用它而不带参数   为给定键提供默认值,插入此值   密钥的字典,并返回。

换句话说,defaultdict不会将任何信息传递给default_factory

子类defaultdict,用于自定义默认__missing__挂钩以调用default_factoryRoom类构造函数),并将缺少的键作为参数:

from collections import defaultdict

class mydefaultdict(defaultdict):
    def __missing__(self, key):
        self[key] = new = self.default_factory(key)
        return new

Room的构造函数看起来像

class Room(object):
    def __init__(self, identity):
        self.numbers = []
        self.identify = identity

从现在开始,您需要使用mydefaultdict代替defaultdict。例如:

room = mydefaultdict(Room)
print(room['Train'].getRoom()) # Train 
print(room['Hospital'].getRoom()) # Hospital

虽然这有效,但我建议您重新考虑存储/访问数据的方式。