如果主题不准确,我深表歉意,我不知道如何表达它。
我正在学习使用 Python 类(class)。我创建了一个我希望能够子类化的类。问题是类的某些部分依赖于类中设置的变量,并且这些部分默认为空值(目的是在子类化时定义它们)。例如:
配置.py:
class Config(object):
VAR1 = ''
if VAR1 == 'somevalue':
VAR2 = VAR1 + 'something'
else:
VAR2 = VAR1
子类.py:
from config import Config
class Production(Config):
VAR1 = 'value1'
这里的问题是 VAR2 没有获取子类 VAR1。我明白为什么这不能按我想要的方式工作,我的问题是:是否可以这样做(或以类似的方式)?如果是的话,怎么办?
更新:
我找到了一种方法,但它仍然需要比我想要的更多的输入 - 下面的函数的变化很小,并且基于 Config
时显式设置的变量被子类化。因此,最好根据子类的上下文(Config
被子类化时的 VAL1 的值)自动设置这些值(来自父类的 VAL2),而不是必须显式设置它们。
配置.py:
class Config(object)
VAR1 = ''
VAR2 = ''
def set_var2(val):
if val == 'somevalue':
VAR2 = val + 'value2'
else:
VAR2 = 'value2'
return VAR2
子类.py:
from config import Config, set_var2
class Production(Config):
VAR1 = 'value1'
VAR2 = set_var2(VAL1)
最佳答案
我认为您想要的是访问一个属性(即,obj.foo
)并让它执行最后一刻的计算。这样,您就可以评估定义原始类后可能发生的任何子类化的结果。
这就是 @property
装饰器的用途 - 将代码隐藏在属性名称后面。请参阅this answer of mine举个例子。
关于Python 子类化和父值赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35931346/