是的!我知道你无法理解标题。
以下面的代码为例。
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支持任何此类功能,以便我可以这样做? 一旦在课堂上调用了房间'某事'的类,我就需要一个代码,这样,自我房间就是所谓的“东西”!
答案 0 :(得分:6)
collections.defaultdict
(任何可调用的)的默认工厂不接受参数。
如果default_factory不是无,则调用它而不带参数 为给定键提供默认值,插入此值 密钥的字典,并返回。
换句话说,defaultdict
不会将任何信息传递给default_factory
。
子类defaultdict
,用于自定义默认__missing__
挂钩以调用default_factory
(Room
类构造函数),并将缺少的键作为参数:
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
虽然这有效,但我建议您重新考虑存储/访问数据的方式。