python:在其他类变量设置之前以编程方式设置一个类变量?

时间:2012-09-08 02:22:15

标签: python

我有一个案例,我在外部函数内创建一个类,然后返回该类。该类具有指定的父类。我希望通过父类的类方法可以访问该类变量,这些方法在类初始化时调用。总之,我需要能够设置一个类变量(不是硬编码),以便在初始化其他硬编码类变量之前可以使用它。

这里有一些示例代码可以让它更清晰:

class Parent(object):
    class_var = None

    @classmethod
    def get_class_var_times_two(cls):
        return cls.class_var * 2


def outer_function(class_var_value):

    class Child(Parent):
        other_var = Parent.get_class_var_times_two() # <-- at this point, somehow Child's class_var is set to class_var_value

不确定在python中是否可以实现。也许class_var_value不需要通过外部函数传递。我尝试使用元类并强制变量通过类属性dictinoary,但无法弄清楚如何在Child上尽早设置class_var,以便在初始化other_var之前设置它。如果可能的话,这一切都会奏效。任何想法都表示赞赏!

编辑:还考虑让other_var成为一个懒惰的属性,但这不是我用例的选项。

1 个答案:

答案 0 :(得分:1)

调用Parent.get_class_var_times_two()会使用cls = Parent调用该函数,因此将使用Parent.class_var的值(无论您从哪个上下文调用该函数)。

所以,你想要做的是致电Child.get_class_var_times_two()。麻烦的是,在Child块完成之前,class没有定义。因此,您需要执行类似的操作(假设您不使用元类):

def outer_function(class_var_value):
    class Child(Parent):
        class_var = class_var_value
    Child.other_var = Child.get_class_var_times_two()