在Python中,有没有一种方法可以从另一个类中调用一个类方法?我正在尝试在Python中旋转自己的MVC框架,但无法弄清楚如何从另一个类的一个类调用方法。
这是我想发生的事情:
class A: def method1(arg1, arg2): # do code here class B: A.method1(1,2)
我正在从PHP慢慢进入Python,因此我正在寻找与PHP等效的Python call_user_func_array()。
call_user_func_array()
更新:刚刚call_user_func_array在您的帖子中看到了对它的引用。那不一样。用于getattr获取函数对象,然后使用您的参数调用它
call_user_func_array
getattr
class A(object): def method1(self, a, b, c): # foo method = A.method1
method现在是一个实际的函数对象。可以直接调用(函数是python中的一流对象,就像PHP> 5.3中一样)。但是下面的考虑仍然适用。也就是说,除非您A.method1使用下面讨论的两个装饰器中的一个进行装饰,将其A作为第一个参数传递给实例或在的实例上访问方法,否则以上示例将爆炸A。
method
A.method1
A
a = A() method = a.method1 method(1, 2)
您有三种选择
method1
classmethod
self
cls
staticmethod
staticmethod1
super
一些例子:
class Test1(object): # always inherit from object in 2.x. it's called new-style classes. look it up def method1(self, a, b): return a + b @staticmethod def method2(a, b): return a + b @classmethod def method3(cls, a, b): return cls.method2(a, b) t = Test1() # same as doing it in another class Test1.method1(t, 1, 2) #form one of calling a method on an instance t.method1(1, 2) # form two (the common one) essentially reduces to form one Test1.method2(1, 2) #the static method can be called with just arguments t.method2(1, 2) # on an instance or the class Test1.method3(1, 2) # ditto for the class method. It will have access to the class t.method3(1, 2) # that it's called on (the subclass if called on a subclass) # but will not have access to the instance it's called on # (if it is called on an instance)
请注意,就像self变量名完全取决于您一样,变量名也完全取决于您,cls但这些是常规值。
现在您知道该怎么做了,我会认真考虑 是否 要这样做。通常,本应被称为未绑定(无实例)的方法最好保留为python中的模块级函数。