一尘不染

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

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支持任何此类功能,以便我可以做到吗?一旦在房间中调用了“某物”类,在该类内部,我需要一个代码,以便self.room是所谓的“某物”!


阅读 269

收藏
2021-01-20

共1个答案

一尘不染

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

如果
default_factory

不为 None ,则在不带参数的情况下调用该函数以提供给定键的默认值,此值将插入键的字典中并返回。

换句话说,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

在此过程中,建议您重新考虑存储/访问数据的方式。

2021-01-20