Python:如何动态定义类属性的值?

时间:2014-11-24 23:52:08

标签: python class dynamic

我需要在运行时动态设置一个类属性。怎么能实现这一目标?我无法在实例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注册表来完成这项工作,但我认为有一种方法可以在课堂上实现这一目标......

1 个答案:

答案 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使代码过度复杂化。