有没有办法从另一个类调用一个类的方法?我正在寻找类似 PHP 的 call_user_func_array()
的东西。这是我想要发生的事情:
class A:
def method1(arg1, arg2):
...
class B:
A.method1(1, 2)
原文由 Lark 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有办法从另一个类调用一个类的方法?我正在寻找类似 PHP 的 call_user_func_array()
的东西。这是我想要发生的事情:
class A:
def method1(arg1, arg2):
...
class B:
A.method1(1, 2)
原文由 Lark 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
更新:刚刚在您的帖子中看到了对
call_user_func_array
的引用。那不一样。使用getattr
获取函数对象,然后用你的参数调用它method
现在是一个实际的函数对象。您可以直接调用(函数是 python 中的一流对象,就像在 PHP > 5.3 中一样)。但是下面的考虑仍然适用。也就是说,上面的例子会崩溃,除非你用下面讨论的两个装饰器之一装饰A.method1
,将A
的实例作为第一个参数传递给它,或者访问方法A
的实例。您可以通过三种方式执行此操作
A
的实例调用method1
(使用两种可能的形式)classmethod
decorator tomethod1
: you will no longer be able to referenceself
inmethod1
but you will get passed acls
实例在它的位置A
在这种情况下。staticmethod
decorator tomethod1
: you will no longer be able to referenceself
, orcls
instaticmethod1
但您可以A
的引用硬编码到其中,尽管很明显,这些引用将由A
的所有子类继承,除非它们专门覆盖method1
致电super
。一些例子:
请注意,就像
self
变量的名称完全取决于您一样,cls
变量的名称也是如此,但这些是习惯值。既然你知道怎么做了,我就认真考虑 你 要不要去做。通常,要调用未绑定(没有实例)的方法最好保留为 python 中的模块级函数。