Python 详解__init_subclass__类方法
2023-12-13 05:32:05
- 类方法
__init_subclass__
从3.6
(whatsnew3.6) 引入,作用是可以在不使用元类的情况下改变子类的行为。也就是说它是独立于元类编程的,也能达到编辑其他类的一种手段。 - 它在一个类被继承时自动调用。这个方法的主要作用是允许一个类在被继承时执行一些特定的操作,例如修改类的属性或方法。
__init_subclass__
方法接收一个类作为参数,这个类就是继承自己的子类。除此之外,__init_subclass__
还可以接收任意数量的关键字参数,这些参数在定义子类时传入。
class B(object):
def __init_subclass__(cls, **kwargs):
print("__init_subclass__", cls, kwargs)
class A(B, name="张三", age=16):
pass
"""
代码运行直接输出下面的结果:
__init_subclass__ <class '__main__.A'> {'name': '张三', 'age': 16}
"""
class A:
def __init_subclass__(cls, **kwargs):
"""当有子类继承了 A ,那么 __init_subclass__ 就会自动调用。
这里的逻辑是:父类 A 为它的所有子类都设置了 default_name 的类属性,且默认值是子类的类名。
__init_subclass__方法解决了如何让父类知道自己被继承的问题。
"""
cls.default_name = kwargs.get("default_name", cls.__name__)
class User(A, default_name="foo"):
"""User类继承了A类,那么A类的__init_subclass__方法就会自动调用。"""
def __init__(self, name):
self.name = name
def say(self):
print(f"i am {self.name}")
class B(A):
pass
if __name__ == "__main__":
f = User("bar")
print(f) # <__main__.User object at 0x100b60fa0>
f.say() # i am bar
print(f.__dict__) # {'name': 'bar'}
print(User.default_name) # foo
print(B.default_name) # B
文章来源:https://blog.csdn.net/JENREY/article/details/134895825
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!