我有一个案例,我在外部函数内创建一个类,然后返回该类。该类具有指定的父类。我希望通过父类的类方法可以访问该类变量,这些方法在类初始化时调用。总之,我需要能够设置一个类变量(不是硬编码),以便在初始化其他硬编码类变量之前可以使用它。
这里有一些示例代码可以让它更清晰:
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成为一个懒惰的属性,但这不是我用例的选项。
答案 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()