如何知道类的成员是否是方法?

2024-04-26 09:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

知道一个类的成员是否是一个方法的最python方法是什么?注意:我只有(可能的)方法的名称(可以是类方法实例方法静态方法)。你知道吗

目前,我正在将类的字典中的对象类型与<type 'function'>进行比较:

def isMethodOf(methodName,klass):
    return type(klass.__dict__.get(methodName)) == type(lambda x:x)

我真的不知道这是否适用于所有的案子。 type(lambda x:x)部分仅用于获取类型<type 'function'>,有更好的方法吗?你知道吗


Tags: 对象实例方法lambda名称类型字典def
2条回答

在上面使用callable。你知道吗

示例:

>>> def func(): pass
>>> callable(func)
>>> True

在Python2上,使用^{}

return inspect.ismethod(getattr(klass, methodName))

对于python3,未绑定的方法已经不存在了,您应该改用^{}。你知道吗

您还可以使用^{} type object测试:

import types

isinstance(getattr(klass, methodName), types.MethodType)

这两种测试都适用于@classmethod方法和常规方法。根据设计,这些测试对于@staticmethod方法是失败的;那些只是抵抗绑定的函数(cls.staticmethod.__get__(instance, cls)返回函数本身)。您可以使用^{}测试函数,或者使用isinstance(obj, (types.MethodType, types.FunctionType))在一个测试中捕获所有3个函数。你知道吗

如果您只想测试某个东西是否可调用,那么可以使用^{} function。即使对象是具有__call__方法的实例,它也可以工作:

>>> class MyCallable(object):
...     def __call__(self):
...         return "Hello World!"
... 
>>> mc = MyCallable()
>>> callable(mc)
True
>>> mc()
'Hello World!'

使用callable()可以处理所有3个方法“类型”以及上述自定义对象。注意,,作为工厂,也是可调用的。你知道吗

相关问题 更多 >