我需要在运行时动态设置一个类属性。怎么能实现这一目标?我无法在实例init之外设置类属性,这意味着每次创建实例时它都会运行。这只需要发生一次(加载类定义时)。
修订案例。
理想情况下我需要做这样的事情,但似乎这是不可能的:
# Note modules are python modules which extend the functionality of my reusable app.
class Test():
active_modules = Test.get_active_moduels()
@classmethod
def get_active_moduels(cls):
#logic for collecting installed modules
return installed
我可以像这样完成工作,但这看起来很愚蠢并导致重大问题。如果我在实例化Test类之前尝试访问active_modules
,即使有active_modules,我也会得到[]。
# Note modules are python modules which extend the functionality of my reusable app.
class Test():
active_modules = []
def __init__ (self):
Test.get_active_moduels()
@classmethod
def get_active_moduels(cls):
if not cls.active_modules:
#logic for collecting installed modules
.....
cls.active_modules = installed_modules
else:
return cls.active_modules
我可以通过创建另一个active_modules
注册表来完成这项工作,但我认为有一种方法可以在课堂上实现这一目标......
答案 0 :(得分:0)
如果您使用具体术语,那将更容易提供帮助。什么是" sub"?无论如何,您的代码可以简化为:
def compute_defaults():
they = []
they.append('default_1')
they.append('default_2')
return they
class Test():
active_subs = compute_defaults()
def __init__(self, sub=None):
if sub:
self.active_subs.append(sub)
然后您可以根据需要使用您的代码:
t1 = Test()
#active will have the installed subs.
active = t1.active_subs
不要不必要地使用getter和setter使代码过度复杂化。