0

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

这里有一些示例代码可以更清楚地说明:

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 不需要通过外部函数传递。我尝试使用元类并在类属性字典中强制变量通过,但无法弄清楚如何尽早在 Child 上设置 class_var,以便在初始化 other_var 之前设置它。如果这是可能的,那么这一切都会奏效。任何想法表示赞赏!

编辑:还考虑将 other_var 设为惰性属性,但这不是我的用例的选项。

4

1 回答 1

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()
于 2012-09-08T02:33:03.737 回答