Python 对于动态创建字典的可订阅对象,是否每次都调用_uinit _u?

Python 对于动态创建字典的可订阅对象,是否每次都调用_uinit _u?,python,performance,oop,Python,Performance,Oop,我有一节课,当然,这只是一个工作示例: class Intervals(dict): def __init__(self, *_): self.update({'P5': 7}) class Intervals(metaclass=Intervals): pass 我喜欢这个想法,因为我不需要这样的实例 只是,现在,每当我调用interval['P5']时,\uuuu init\uuuu运行并在返回值之前构建一个新字典?不,不是每次调用interval['P5

我有一节课,当然,这只是一个工作示例:

class Intervals(dict):
    def __init__(self, *_):
        self.update({'P5': 7})

class Intervals(metaclass=Intervals):
    pass
我喜欢这个想法,因为我不需要这样的实例


只是,现在,每当我调用
interval['P5']
时,
\uuuu init\uuuu
运行并在返回值之前构建一个新字典?

不,不是每次调用
interval['P5']
都会构建一个新字典

实际上,您的代码相当于:

class Intervals(dict):
    def __init__(self, *_):
        self.update({'P5': 7})

Intervals = Intervals()

您只需创建一个
interval
对象(这只是一个用一些值初始化的
dict
),并将其存储在名为
interval
的变量中,隐藏
interval
类。

为什么要使用元类?为什么您的类共享一个名称?你到底想达到什么目的?!无论如何,你肯定可以用
打印
来回答你自己的问题?你是认真的吗?如果没有最后两行,
interval['P5']
必须是
interval()['P5']
。这也是他们两人同名的原因。而且,我不需要一个实例。但我的问题是,是否每次我想要检索一个值时,都会一遍又一遍地构建该词典。因为那样的话,使用一个元类或两个同名的类是没有意义的……非常严肃。元类不必与类具有相同的名称,这样才能工作。你还没有解释你为什么要这么做;导致此解决方案的需求是什么?您错了。元类应该在实例化时生成一个类。在这里,您的元类生成一个无法实例化的dict。如果您想使用诸如
interval['P5']
之类的语法,您应该查看。答案是否定的,因为最后两行代码相当于
interval=interval()