我希望在以下代码中,当我输入 instance_of_A = A(
时,预期参数名称为 init_argumentA
而不是*meta_args, **meta_kwargs
。但不幸的是,元类的 __call__
方法的参数被显示出来。
class Meta(type):
def __call__(cls,*meta_args,**meta_kwargs):
# Something here
return super().__call__(*meta_args, **meta_kwargs)
class A(metaclass = Meta):
def __init__(self,init_argumentA):
# something here
class B(metaclass = Meta):
def __init__(self,init_argumentB):
# something here
我已经搜索了解决方案,并发现了问题如何动态更改子类中方法的签名?和更改签名的装饰器:适当记录附加参数。但是,似乎没有一个完全符合我的要求。第一个链接使用inspect来更改传递给函数的变量数量,但我似乎无法让它在我的情况下工作,并且我认为必须有更明显的解决方案。第二个链接不完全符合我的要求,但在这方面的某些内容可能是一个很好的替代品。
编辑:我正在使用Spyder。我想要这个是因为我有数千个Meta类型的类,每个类都有不同的参数,这是不可能记住的,所以想法是当用户看到正确的参数显示时可以记住它们。
help()
或文档构建有关? - MSeifert__init__
中加入pass
)在Spyder中运行,当我打印A(
或B(
时会显示A.__init__
和B.__init__
的签名。你能否提供更多信息,比如Spyder版本、Python版本、一个可用的代码示例(你的代码会产生缩进错误),以及可能是不正确建议的截图? - MSeifert