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

Python 如何知道类的成员是否是方法?,python,class,oop,methods,Python,Class,Oop,Methods,知道类的成员是否是方法的最简单的方法是什么?注意:我只有(可能的)方法的名称(可以是类方法、实例方法或静态方法) 目前,我正在将类的字典中的对象类型与进行比较: 我真的不知道这是否适用于所有的案例。 类型(lambda x:x)部分仅用于获取类型,有更好的方法吗?在Python 2上,使用: 对于Python3,未绑定的方法已经不存在了,您可以使用 您还可以使用来测试: import types isinstance(getattr(klass, methodName), types.Meth

知道类的成员是否是方法的最简单的方法是什么?注意:我只有(可能的)方法的名称(可以是类方法、实例方法或静态方法)

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

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

在Python 2上,使用:

对于Python3,未绑定的方法已经不存在了,您可以使用

您还可以使用来测试:

import types

isinstance(getattr(klass, methodName), types.MethodType)
这两个测试都适用于
@classmethod
方法和常规方法。根据设计,这些测试在
@staticmethod
方法中失败;这些只是抵制绑定的函数(
cls.staticmethod.\uuu获取(实例,cls)
返回函数本身)。您可以使用isinstance(obj,(types.MethodType,types.FunctionType))测试函数,或使用isinstance(obj,(types.MethodType,types.FunctionType))在一次测试中捕获所有3个函数

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

>>> class MyCallable(object):
...     def __call__(self):
...         return "Hello World!"
... 
>>> mc = MyCallable()
>>> callable(mc)
True
>>> mc()
'Hello World!'
使用
callable()。请注意,作为工厂的类也可以调用。

在Python 2上,使用:

对于Python3,未绑定的方法已经不存在了,您可以使用

您还可以使用来测试:

import types

isinstance(getattr(klass, methodName), types.MethodType)
这两个测试都适用于
@classmethod
方法和常规方法。根据设计,这些测试在
@staticmethod
方法中失败;这些只是抵制绑定的函数(
cls.staticmethod.\uuu获取(实例,cls)
返回函数本身)。您可以使用isinstance(obj,(types.MethodType,types.FunctionType))
测试函数,或使用isinstance(obj,(types.MethodType,types.FunctionType))在一次测试中捕获所有3个函数

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

>>> class MyCallable(object):
...     def __call__(self):
...         return "Hello World!"
... 
>>> mc = MyCallable()
>>> callable(mc)
True
>>> mc()
'Hello World!'
使用
callable()。请注意,作为工厂的类也是可调用的。

对其使用可调用

例如:

>>> def func(): pass
>>> callable(func)
>>> True
对它使用callable

例如:

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

伟大的但是,你推荐哪一种?在这三种情况下,所有这些都能正常工作?只是好奇——如果方法不存在,OP的原始代码不会抛出错误。因此,使用
getattr(klass,methodName,None)
保留此功能不是更好吗?还是我错了?@iCodez:当然,你可以使用默认值,这样就行了。但是,这不是我重点关注的,因为这是一个与当前问题有点正交的小细节。如果使用
callable()
,请记住类是可调用的。太好了!但是,你推荐哪一种?在这三种情况下,所有这些都能正常工作?只是好奇——如果方法不存在,OP的原始代码不会抛出错误。因此,使用
getattr(klass,methodName,None)
保留此功能不是更好吗?还是我错了?@iCodez:当然,你可以使用默认值,这样就行了。然而,这并不是我重点关注的,因为这是一个与当前问题有点正交的小细节。如果使用
callable()
,请记住类是可调用的。