假设我们有一个父类Base,我们希望每个子类的greet方法在调用之前都先打印一条日志信息。 deflog_and_call(func):defwrapper(self,*args,**kwargs):print("Call func greet")returnfunc(self,*args,**kwargs)returnwrapperclassBase:def__init_subclass__(cls,**kwargs):ifhasattr(cls,'greet'):cls.greet=l...
如同通过元类,对类对象动态添加属性、方法,进行类的统一动态增强。通过__init_subclass__()方法,也可以做到这一点。直接看代码:classPluginBase:def__init_subclass__(cls, **kwargs): super().__init_subclass__(**kwargs)ifnot hasattr(cls, 'active'): cls.active = Falseifnot hasattr(cls,...
之前,我们可以通过元类的类似插件注册的功能来实现,现在,有了__init_subclass__()方法,我们也可以实现同样的功能。 直接看代码示例: class PluginBase: plugins = {} def __init_subclass__(cls, **kwargs): super().__init_subclass__(**kwargs) PluginBase.plugins[cls.__name__] = cls class Plugin...
# defining a SuperClassclassSuperClass:def__init_subclass__(cls, default_name, **kwargs): cls.default_name = default_name# defining a subclassclassSubClass1(SuperClass, default_name ="SubClass1"):pass# defining another subclassclassSubClass2(SuperClass, default_name ="SubClass2"): default_na...
__init_subclass__是 Python 3.6 引入的一个特殊方法,用于在子类被定义时执行一些操作。 这个方法允许你在父类中定义一个类方法,当子类继承父类时会自动调用这个方法,你可以在其中进行一些初始化工作。 以下是关于__init_subclass__方法的一些重要点:
我终于升级了我的 python 版本,并且发现了添加的新功能。除此之外,我还在为新的 __init_subclass__ 方法摸不着头脑。从文档: 只要包含类被子类化,就会调用此方法。 cls 就是新的子类。如果定义为普通实例方法...
'__gt__','__hash__', '__init__', '__init_subclass__', '__le__', '__lt__','__cmodule__', '__ne__', '__new__', '__reduce__', '__reduce_ex__','__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__','__weakref__'] ...
实现继承之后,子类将继承父类的属性,也可以使用内建函数insubclass()来判断一个类是不是另一个类的子孙类: class Parent(object): ''' parent class ''' numList = [] def numdiff(self, a, b): return a-b class Child(Parent): pass c = Child() ...
一个这样的技巧是使用__init_subclass__作为扩展基类功能的快捷方式,而不必处理元类: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 classPet:def__init_subclass__(cls,/,default_breed,**kwargs):super().__init_subclass__(**kwargs)cls.default_breed=default_breedclassDog(Pet,default_name="Ge...
>>>dir(list)['__add__','__class__','__contains__','__delattr__','__delitem__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__','__getitem__','__gt__','__hash__','__iadd__','__imul__','__init__','__init_subclass__','...