@@ -765,27 +765,27 @@ def __new__(cls, /, *args, **kwargs):
765765
766766 arg .__new__ = staticmethod (__new__ )
767767
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- if isinstance (original_init_subclass , MethodType ):
772- original_init_subclass = original_init_subclass .__func__
768+ if "__init_subclass__" in arg .__dict__ :
769+ # __init_subclass__ is directly present on the decorated class.
770+ # Synthesize a wrapper that calls this method directly.
771+ original_init_subclass = arg .__init_subclass__
772+ # We need slightly different behavior if __init_subclass__
773+ # is a bound method (likely if it was implemented in Python).
774+ # Otherwise, it likely means it's a builtin such as
775+ # object's implementation of __init_subclass__.
776+ if isinstance (original_init_subclass , MethodType ):
777+ original_init_subclass = original_init_subclass .__func__
773778
774779 @functools .wraps (original_init_subclass )
775780 def __init_subclass__ (* args , ** kwargs ):
776781 _wm .warn (msg , category = category , stacklevel = stacklevel + 1 )
777782 return original_init_subclass (* args , ** kwargs )
778-
779- arg .__init_subclass__ = classmethod (__init_subclass__ )
780- # Or otherwise, which likely means it's a builtin such as
781- # object's implementation of __init_subclass__.
782783 else :
783- @functools .wraps (original_init_subclass )
784- def __init_subclass__ (* args , ** kwargs ):
784+ def __init_subclass__ (cls , * args , ** kwargs ):
785785 _wm .warn (msg , category = category , stacklevel = stacklevel + 1 )
786- return original_init_subclass (* args , ** kwargs )
786+ return super ( arg , cls ). __init_subclass__ (* args , ** kwargs )
787787
788- arg .__init_subclass__ = __init_subclass__
788+ arg .__init_subclass__ = classmethod ( __init_subclass__ )
789789
790790 arg .__deprecated__ = __new__ .__deprecated__ = msg
791791 __init_subclass__ .__deprecated__ = msg
0 commit comments