是的 我知道您看不懂标题。 以下面的代码为例。
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支持任何此类功能,以便我可以做到吗?一旦在房间中调用了“某物”类,在该类内部,我需要一个代码,以便self.room是所谓的“某物”!
collections.defaultdict(任何可调用的)默认工厂不接受参数。
collections.defaultdict
如果 default_factory 不为 None ,则在不带参数的情况下调用该函数以提供给定键的默认值,此值将插入键的字典中并返回。
换句话说,defaultdict不会将任何信息传递给default_factory。
defaultdict
default_factory
子类defaultdict可自定义默认__missing__钩子,以使用缺少键作为参数来调用default_factory(Room类构造函数):
__missing__
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。例:
mydefaultdict
room = mydefaultdict(Room) print(room['Train'].getRoom()) # Train print(room['Hospital'].getRoom()) # Hospital
在此过程中,建议您重新考虑存储/访问数据的方式。