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()
,请记住类是可调用的。