【发布时间】:2018-09-19 06:51:27
【问题描述】:
我想在下面的代码中输入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
我已经搜索了一个解决方案并找到了问题How to dynamically change signatures of method in subclass? 和Signature-changing decorator: properly documenting additional argument。但是没有,似乎完全是我想要的。第一个链接使用检查来更改赋予函数的变量数量,但我似乎无法让它适用于我的情况,我认为必须有一个更明显的解决方案。 第二个不完全是我想要的,但这种方式可能是一个不错的选择。
编辑:我在 Spyder 工作。我想要这个,因为我有数千个 Meta 类型的类,每个类都有不同的参数,这是不可能记住的,所以这个想法是当看到正确的参数出现时用户可以记住它。
【问题讨论】:
-
您必须更具体地说明应该在何时显示它们。您是否在 Python shell、IDLE、IPython、Jupyter、Visual Studio 代码或其他工具中工作?您希望它们完全显示在 IDE 中,还是与
help()或文档构建有关? -
感谢反馈,我更新了问题,希望现在更清楚
-
这似乎是 IDE 的问题,而不是 Python 本身的问题
-
好的,我无法重现。如果我在 spyder 中使用您的代码(在
__init__s 中使用pass),当我打印A(或B(时,它会显示A.__init__和B.__init__的签名。您能否添加更多信息,例如 spyder 版本、python 版本、工作代码示例(您的代码会产生 IndentationError)以及不正确建议的屏幕截图?