在python中使用类方法设置类属性
我有一个带有几个类属性的类,我想使用类方法初始化它。这是因为我在一个列表中有将近300个项目,我不希望它们出现在类定义中。由于我将拥有至少数百个此类对象,因此当它们不修改我定义的两个列表,并且只从它们中读取时,为每个实例读取并创建一个属性是没有效率的在python中使用类方法设置类属性,python,oop,Python,Oop,我有一个带有几个类属性的类,我想使用类方法初始化它。这是因为我在一个列表中有将近300个项目,我不希望它们出现在类定义中。由于我将拥有至少数百个此类对象,因此当它们不修改我定义的两个列表,并且只从它们中读取时,为每个实例读取并创建一个属性是没有效率的 class exampleClass: @classmethod def getUnsupportedEvents(cls): with open("randomfile.json") as file:
class exampleClass:
@classmethod
def getUnsupportedEvents(cls):
with open("randomfile.json") as file:
return json.load(file)
supportedEvents = []
unsupportedEvents = getUnsupportedEvents()
我想使用classmethodgetUnsupportedEvents()
设置类属性unsupportedEvent
,但是当我尝试以上述方式进行设置时,会出现以下错误:
unsupportedEvents = getUnsupportedEvents()
TypeError: 'classmethod' object is not callable
这看起来很简单,我只是忽略了一些非常简单的东西吗?在类被完全定义之前,您正在尝试使用一个类方法。您必须在定义后延迟呼叫:
class exampleClass:
@classmethod
def getUnsupportedEvents(cls):
with open("randomfile.json") as file:
return json.load(file)
supportedEvents = []
exampleClass.unsupportedEvents = exampleClass.getUnsuportedEvents()
如果要在类内赋值,则此代码应该为
getUnsupportedEvents
提供一个NameError
,只需删除括号unsupportedEvents=getUnsupportedEvents
@dhentris即可将函数绑定到变量,这不是我想要的。我希望它执行并返回要存储为类属性的函数值。如果我要将该类导入主程序中,会不会出现问题,因为该行代码在类之外?加载模块并导入符号。为了导入类,将加载模块并执行代码行。当然,它必须与该定义之后的类定义位于同一个模块中。即使我要从该模块导入特定的类,也会加载整个模块吗,即“from exampleModule import exampleClass”,其中exampleModule有几个类。这就是我说加载(完整)模块并导入(一些)符号的原因。事实上,from mod import symb
首先加载完整的mod
模块,然后在本地(或模块全局)符号表中导入sym
。