当前位置: 首页 > 面试题库 >

如何在Python中找出方法的多样性

李和昶
2023-03-14
问题内容

我想找出Python中某个方法的优点(它接收的参数数量)。现在我正在这样做:

def arity(obj, method):
  return getattr(obj.__class__, method).func_code.co_argcount - 1 # remove self

class Foo:
  def bar(self, bla):
    pass

arity(Foo(), "bar")   # => 1

我希望能够实现这一目标:

Foo().bar.arity()   # => 1

更新 :现在上面的函数无法使用内置类型,对此的任何帮助也将不胜感激:

 # Traceback (most recent call last):
 #   File "bla.py", line 10, in <module>
 #     print arity('foo', 'split')  # =>
 #   File "bla.py", line 3, in arity
 #     return getattr(obj.__class__, method).func_code.co_argcount - 1 # remove self
 # AttributeError: 'method_descriptor' object has no attribute 'func_co

问题答案:

inspectPython标准库中的模块是您的朋友-
请参阅在线文档!
inspect.getargspec(func)返回四个选项的元组,args, varargs, varkw, defaultslen(args)是“主元数”,但参数数量可以从任何东西到无穷大,如果你有varargs和/或varkw没有None,而一些参数可以省略(默认和)如果defaults不是None。你怎么把它变成一个数字,击败了我,但想必你有主意了!-)

这适用于Python编码的函数,但不适用于C编码的函数。除了通过docstring(或可选地通过Python 3中的 注释 )外,Python C
API中没有任何内容允许C编码的函数(包括内置函数)公开其内省签名。因此,如果其他方法失败(最后,文档字符串也可能会丢失,在这种情况下该功能将仍然是个谜),您
需要退后一步来作为最后的切入点来解析文档字符串。



 类似资料:
  • 问题内容: IOW,我只需要移交“ a.some”即可访问“ a”。 问题答案: 从python 2.6开始,您可以使用特殊属性: 已在py3k中淘汰。 有关详细信息,请参见Python标准库中的模块。

  • 我曾尝试在Python中查找立方根,但不知道如何找到它。有一行代码有效,但他不给我完整的数字。例子: 这不是给我4强硬,而是3.99999。有人知道我该怎么解决这个问题吗?

  • 我正在用java制作一个虚数图形计算器(使用bi={a,b}),并希望为 - * / 和^运算符制作新函数,因为它们不适用于双[]变量。我知道如何制作普通的方法,比如File(),但是我在做像int.getRed()这样的事情时遇到了麻烦。这是我的加法代码 我的添加部分是正确的,我只是找不到任何让函数更“逼真”的东西,比如有人能帮我吗?一旦我弄明白这一点,我应该知道如何做其他的。非常感谢!

  • 问题内容: 我已连接到,并且想要输入一些内容,以便它退出其中的方法。 码: 我想输入并返回主类方法。 该方法使用a 输出数据。 问题摘要:我尝试调用return;但它不会返回方法main(),我该如何解决? 问题答案: 基本上,您需要的是某种模式对话框,通过该对话框,您可以有效地在显示对话框的那一点上暂停程序的执行,直到关闭(关闭)该对话框为止,然后继续执行… 有关更多详细信息,请参见如何制作对话

  • 我有以下dsl: 这会失败并出现以下错误 我做错了什么?我正在使用 Jenkins2.89.4 作业DSL 1.68 管道作业2.20 管道:API 2.27 管道:基本步骤2.7 管道:构建步骤2.7 管道:声明1.2.9

  • 我正试图读取詹金斯管道中的一个文件。 为此,我在我的jenkins文件中导入的库中定义了下面的函数。 但是,我一直得到以下例外。 此外,如果我删除< code>readFile函数调用,我的jenkins管道将成功执行。 你知道这里有什么问题吗?