@@ -765,27 +765,27 @@ def __new__(cls, /, *args, **kwargs):
765
765
766
766
arg .__new__ = staticmethod (__new__ )
767
767
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__
773
778
774
779
@functools .wraps (original_init_subclass )
775
780
def __init_subclass__ (* args , ** kwargs ):
776
781
_wm .warn (msg , category = category , stacklevel = stacklevel + 1 )
777
782
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__.
782
783
else :
783
- @functools .wraps (original_init_subclass )
784
- def __init_subclass__ (* args , ** kwargs ):
784
+ def __init_subclass__ (cls , * args , ** kwargs ):
785
785
_wm .warn (msg , category = category , stacklevel = stacklevel + 1 )
786
- return original_init_subclass (* args , ** kwargs )
786
+ return super ( arg , cls ). __init_subclass__ (* args , ** kwargs )
787
787
788
- arg .__init_subclass__ = __init_subclass__
788
+ arg .__init_subclass__ = classmethod ( __init_subclass__ )
789
789
790
790
arg .__deprecated__ = __new__ .__deprecated__ = msg
791
791
__init_subclass__ .__deprecated__ = msg
0 commit comments