Python 如何检查没有实例的方法?
我需要:Python 如何检查没有实例的方法?,python,Python,我需要: 接收方法作为参数(直接从类接收,不带实例) 创建一个实例 从实例执行所述方法 问题是,我如何才能可靠地将类从方法中取出?我试着在inspect模块中研究一些东西,但是因为没有实例,它认为该方法是函数,而不是方法 下面是我正在尝试做的一些示例: def execute_method(method): cls = get_class_from_method(method) obj = cls() getattr(obj, method.__name__)()
- 接收方法作为参数(直接从类接收,不带实例)
- 创建一个实例
- 从实例执行所述方法
inspect
模块中研究一些东西,但是因为没有实例,它认为该方法是函数
,而不是方法
下面是我正在尝试做的一些示例:
def execute_method(method):
cls = get_class_from_method(method)
obj = cls()
getattr(obj, method.__name__)()
def get_class_from_method(method):
pass # how?
execute_method(HelloView.say_hello)
Python 2方法对象有一个
im_class
属性,该属性引用它们绑定到的实例的类:
cls = method.im_class
对于一个未绑定的方法,在Python3中,您将运气不佳(函数返回时完全没有更改,没有对类的引用)。Python 2返回一个未绑定的方法类型,其im\u class
属性仍然存在:
>>> class Foo(object):
... def bar(self): pass
...
>>> Foo.bar.im_class
<class '__main__.Foo'>
但是,如果该类是在函数中创建的(因此是本地的),或者该类是通过类装饰器替换的,或者只是在全局名称空间中重命名的,那么上述技巧充其量不会起作用,最坏的情况下会给您一个完全不同的对象,您不知道是否是这种情况。Python 2方法对象有一个
im\u class
属性,该属性引用它们绑定到的实例的类:
cls = method.im_class
对于一个未绑定的方法,在Python3中,您将运气不佳(函数返回时完全没有更改,没有对类的引用)。Python 2返回一个未绑定的方法类型,其im\u class
属性仍然存在:
>>> class Foo(object):
... def bar(self): pass
...
>>> Foo.bar.im_class
<class '__main__.Foo'>
但是,如果该类是在函数中创建的(因此是本地的),或者该类是通过类装饰器替换的,或者只是在全局名称空间中重命名的,那么上述技巧充其量不会起作用,最坏的情况下会给您一个完全不同的对象,你不知道情况是否如此。这不是一个绑定方法。@hugo_leonardo:更新为实际工作,对此很抱歉。哦。好啊(:~不过我希望Python3有办法。@hugo_leonardo:没有。你可以尝试解释
\uuuu qualname\uuuu
属性,并在相同的全局中搜索父类。但这并不能保证有效,因为该类可能是在本地命名空间中创建的,或者被包装在类装饰器或其他WI中se不再以该名称的全局形式出现。我想你是对的。刚刚发现这是一个重复的问题:它不是绑定方法。@hugo_leonardo:更新为实际工作,对此表示抱歉。哦,好的(:~不过我希望Python3有办法。@hugo_leonardo:没有。你可以尝试解释\uuuu qualname\uuuu
属性,并在相同的全局中搜索父类。但这并不能保证有效,因为该类可能是在本地命名空间中创建的,或者被包装在类装饰器或其他WI中se不再以该名称的全局名称出现。我想你是对的。刚刚发现这是一个重复的问题: