@@ -602,27 +602,27 @@ def __new__(cls, /, *args, **kwargs):
602602
603603 arg .__new__ = staticmethod (__new__ )
604604
605- original_init_subclass = arg .__init_subclass__
606- # We need slightly different behavior if __init_subclass__
607- # is a bound method (likely if it was implemented in Python)
608- if isinstance (original_init_subclass , MethodType ):
609- original_init_subclass = original_init_subclass .__func__
605+ if "__init_subclass__" in arg .__dict__ :
606+ # __init_subclass__ is directly present on the decorated class.
607+ # Synthesize a wrapper that calls this method directly.
608+ original_init_subclass = arg .__init_subclass__
609+ # We need slightly different behavior if __init_subclass__
610+ # is a bound method (likely if it was implemented in Python).
611+ # Otherwise, it likely means it's a builtin such as
612+ # object's implementation of __init_subclass__.
613+ if isinstance (original_init_subclass , MethodType ):
614+ original_init_subclass = original_init_subclass .__func__
610615
611616 @functools .wraps (original_init_subclass )
612617 def __init_subclass__ (* args , ** kwargs ):
613618 warn (msg , category = category , stacklevel = stacklevel + 1 )
614619 return original_init_subclass (* args , ** kwargs )
615-
616- arg .__init_subclass__ = classmethod (__init_subclass__ )
617- # Or otherwise, which likely means it's a builtin such as
618- # object's implementation of __init_subclass__.
619620 else :
620- @functools .wraps (original_init_subclass )
621- def __init_subclass__ (* args , ** kwargs ):
621+ def __init_subclass__ (cls , * args , ** kwargs ):
622622 warn (msg , category = category , stacklevel = stacklevel + 1 )
623- return original_init_subclass (* args , ** kwargs )
623+ return super ( arg , cls ). __init_subclass__ (* args , ** kwargs )
624624
625- arg .__init_subclass__ = __init_subclass__
625+ arg .__init_subclass__ = classmethod ( __init_subclass__ )
626626
627627 arg .__deprecated__ = __new__ .__deprecated__ = msg
628628 __init_subclass__ .__deprecated__ = msg
0 commit comments