我想要一个类的一些实例MyClass
,它共享从文件中读取的一些常量属性,但是也有一些属性的值对于实例来说是唯一的。但是,我只想对所有实例读取一次文件
像这样的
配置.json
{
"a": 1,
"b": 2,
}
然后类定义:
class MyBaseClass:
def __new__(cls):
with open('config.json', 'r') as f:
for key, value in json.load(f).items():
setattr(cls, key, value)
class MyClass(MyBaseClass):
def __init__(self, param):
self.c = param
当我初始化MyClass
的实例时
inst1 = MyClass("One")
inst2 = MyClass("Two")
拥有inst1.c
就是One
,inst2.c
就是Two
。但是我想通过一种方式来实现这一点,使得MyBaseClass只从config.json
读取一次数据。就像独生子女一样。我该怎么做
您可以将
MyBaseClass
定义为元类,因此只需执行一次现在,将
MyBaseClass
指定为MyClass
的元类定义
MyClass
时,只调用MyBaseClass.__new__
方法一次。现在将导致创建这两个实例而不进一步读取
config.json
你已经有了大部分的框架。在第一次创建类时,会运行许多代码。最简单的方法是使用类主体本身。您可以使用它创建一个包含所需属性的类变量,并使用类似于此处所示的代码段:
运行类后,类命名空间中保留的任何名称都将成为类变量,而不仅仅是方法。只有当您有一个不使用插槽或具有冲突属性的常规类时,更新字典才会起作用。在这些情况下,请使用
setattr
中的__new__
循环相关问题 更多 >
编程相关推荐