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()
。