【发布时间】:2020-06-04 06:46:46
【问题描述】:
我有两个配置类,基类Config和子类ProdConfig,代码如下:
class Config:
URL = "http://127.0.0.1"
ANOTHER_URL = URL + "/home"
class ProdConfig(Config):
URL = "http://test.abc.com"
# ANOTHER_URL = URL + "/home"
print(Config.URL) # "http://127.0.0.1"
print(Config.ANOTHER_URL) # "http://127.0.0.1/home"
print(ProdConfig.URL) # "http://test.abc.com"
print(ProdConfig.ANOTHER_URL) # http://127.0.0.1/home
如果我没有在 ProdConfig 中覆盖变量ANOTHER_URL 或将其声明为@property,则该值与基类相同,我得到它 cus 值是在导入基类时分配的,但我可以用 new 得到它值与新的URL 对齐?有没有办法使用Metaclass或setattr或getattr技巧来解决这个问题??
非常感谢!
【问题讨论】:
-
proerty是指@property装饰器吗?在类级别访问ANOTHER_URL的分配时,即使这样也无法解决您的问题 -property通常只会对类的实例产生影响(即访问ProdConfig.ANOTHER_URL将返回那里的确切分配,这将是property对象定义,而不是您的应用程序可能期望的值)。元类可能对此有所帮助,但其额外的复杂性可能会导致额外的复杂性。 -
无论如何,如果您正在考虑使用元类来实现类属性,this thread 有一个解决方案,但请注意所需的额外复杂性。
-
是的,谢谢,它是
@property,我编辑了它。虽然它不会直接解决我的问题,但我可以初始化Config或ProdConfig然后将其用作对象,也许我认为它作为 Config 类很难看 -
然后简单地定义一个名为
ANOTHER_URL的函数return self.URL + '/home'并用@property装饰器装饰它。 -
是的,可能没问题,但是我觉得在config类中写方法不太好看,如果我在子类中覆盖字段,我认为写太多了没有必要,所以这就是我的困惑......
标签: python python-3.x flask