【发布时间】:2020-09-26 01:55:53
【问题描述】:
如何在子类中重写父类属性不使用任一类的对象实例?来自 Java/C++ 及其严格的世界结构设计,我发现自己受到 Python 做事方式的挑战。我想保持相对静止。
示例:
from urllib.parse import urljoin
class base:
host = "/host/"
path = "Override this in child classes"
url = urljoin(host, path)
class config(base):
path = "config"
@classmethod
def print_url(cls):
print(cls.url) # Currently prints "/host/Override this in child classes"
# Would like to print "/host/config" instead
class log(base):
path = "log"
@classmethod
def print_url(cls):
print(cls.url) # Currently prints "/host/Override this in child classes"
# Would like to print "/host/log" instead
所需用途:
>>> config.print_url()
/host/config
>>> log.print_url()
/host/log
我希望 config.path 和 log.path 属性覆盖 base.path。这样我就可以在base 类中一劳永逸地使用url = urljoin(host, path)(并且避免在每个派生类中复制/粘贴相同的属性/计算)。
如果不构造对象(我希望避免这种情况),我无法弄清楚如何实现这一点。有人有什么建议吗?提前致谢!
【问题讨论】:
-
Python 类也是对象。你可以这样对待它们。
标签: python oop inheritance overriding subclass