最佳答案
我最终升级了我的 python 版本,并且发现了新添加的特性。在其他方面,我对新的 __init_subclass__
方法感到困惑。来自文件:
只要包含类的子类为.cls,就会调用此方法 然后是新的子类。如果定义为普通的实例方法,则此 方法隐式转换为类方法。
因此,我开始按照文档中的例子,对它进行一些处理:
class Philosopher:
def __init_subclass__(cls, default_name, **kwargs):
super().__init_subclass__(**kwargs)
print(f"Called __init_subclass({cls}, {default_name})")
cls.default_name = default_name
class AustralianPhilosopher(Philosopher, default_name="Bruce"):
pass
class GermanPhilosopher(Philosopher, default_name="Nietzsche"):
default_name = "Hegel"
print("Set name to Hegel")
Bruce = AustralianPhilosopher()
Mistery = GermanPhilosopher()
print(Bruce.default_name)
print(Mistery.default_name)
产生以下输出:
Called __init_subclass(<class '__main__.AustralianPhilosopher'>, 'Bruce')
'Set name to Hegel'
Called __init_subclass(<class '__main__.GermanPhilosopher'>, 'Nietzsche')
'Bruce'
'Nietzsche'
我知道这个方法叫做 之后子类定义,但是我的问题主要是关于这个特性的用法。我也读了 PEP 487的文章,但帮助不大。这种方法在哪些方面有帮助?是为了:
还有,我是否需要了解 __set_name__
才能完全理解它的用法?