@@ -4042,6 +4042,79 @@ def __init__(self, b):
40424042 ('bar' , 2 , ..., "keyword_only" )),
40434043 ...))
40444044
4045+ def test_signature_on_class_with_wrapped_metaclass_call (self ):
4046+ class CM (type ):
4047+ @identity
4048+ def __call__ (cls , a ):
4049+ pass
4050+ class C (metaclass = CM ):
4051+ def __init__ (self , b ):
4052+ pass
4053+
4054+ self .assertEqual (self .signature (C ),
4055+ ((('a' , ..., ..., "positional_or_keyword" ),),
4056+ ...))
4057+
4058+ with self .subTest ('classmethod' ):
4059+ class CM (type ):
4060+ @classmethod
4061+ @identity
4062+ def __call__ (cls , a ):
4063+ return a
4064+ class C (metaclass = CM ):
4065+ def __init__ (self , b ):
4066+ pass
4067+
4068+ self .assertEqual (C (1 ), 1 )
4069+ self .assertEqual (self .signature (C ),
4070+ ((('a' , ..., ..., "positional_or_keyword" ),),
4071+ ...))
4072+
4073+ with self .subTest ('staticmethod' ):
4074+ class CM (type ):
4075+ @staticmethod
4076+ @identity
4077+ def __call__ (a ):
4078+ return a
4079+ class C (metaclass = CM ):
4080+ def __init__ (self , b ):
4081+ pass
4082+
4083+ self .assertEqual (C (1 ), 1 )
4084+ self .assertEqual (self .signature (C ),
4085+ ((('a' , ..., ..., "positional_or_keyword" ),),
4086+ ...))
4087+
4088+ with self .subTest ('MethodType' ):
4089+ class A :
4090+ @identity
4091+ def call (self , a ):
4092+ return a
4093+ class CM (type ):
4094+ __call__ = A ().call
4095+ class C (metaclass = CM ):
4096+ def __init__ (self , b ):
4097+ pass
4098+
4099+ self .assertEqual (C (1 ), 1 )
4100+ self .assertEqual (self .signature (C ),
4101+ ((('a' , ..., ..., "positional_or_keyword" ),),
4102+ ...))
4103+
4104+ with self .subTest ('descriptor' ):
4105+ class CM (type ):
4106+ @DescWithDeco
4107+ def __call__ (self , a ):
4108+ return a
4109+ class C (metaclass = CM ):
4110+ def __init__ (self , b ):
4111+ pass
4112+
4113+ self .assertEqual (C (1 ), 1 )
4114+ self .assertEqual (self .signature (C ),
4115+ ((('a' , ..., ..., "positional_or_keyword" ),),
4116+ ...))
4117+
40454118 def test_signature_on_class_with_decorated_init (self ):
40464119 class C :
40474120 @identity
0 commit comments