@@ -762,27 +762,27 @@ def __new__(cls, /, *args, **kwargs):
762762
763763 arg .__new__ = staticmethod (__new__ )
764764
765- original_init_subclass = arg .__init_subclass__
766- # We need slightly different behavior if __init_subclass__
767- # is a bound method (likely if it was implemented in Python)
768- if isinstance (original_init_subclass , MethodType ):
769- original_init_subclass = original_init_subclass .__func__
765+ if "__init_subclass__" in arg .__dict__ :
766+ # __init_subclass__ is directly present on the decorated class.
767+ # Synthesize a wrapper that calls this method directly.
768+ original_init_subclass = arg .__init_subclass__
769+ # We need slightly different behavior if __init_subclass__
770+ # is a bound method (likely if it was implemented in Python).
771+ # Otherwise, it likely means it's a builtin such as
772+ # object's implementation of __init_subclass__.
773+ if isinstance (original_init_subclass , MethodType ):
774+ original_init_subclass = original_init_subclass .__func__
770775
771776 @functools .wraps (original_init_subclass )
772777 def __init_subclass__ (* args , ** kwargs ):
773778 _wm .warn (msg , category = category , stacklevel = stacklevel + 1 )
774779 return original_init_subclass (* args , ** kwargs )
775-
776- arg .__init_subclass__ = classmethod (__init_subclass__ )
777- # Or otherwise, which likely means it's a builtin such as
778- # object's implementation of __init_subclass__.
779780 else :
780- @functools .wraps (original_init_subclass )
781- def __init_subclass__ (* args , ** kwargs ):
781+ def __init_subclass__ (cls , * args , ** kwargs ):
782782 _wm .warn (msg , category = category , stacklevel = stacklevel + 1 )
783- return original_init_subclass (* args , ** kwargs )
783+ return super ( arg , cls ). __init_subclass__ (* args , ** kwargs )
784784
785- arg .__init_subclass__ = __init_subclass__
785+ arg .__init_subclass__ = classmethod ( __init_subclass__ )
786786
787787 arg .__deprecated__ = __new__ .__deprecated__ = msg
788788 __init_subclass__ .__deprecated__ = msg
0 commit comments