How to distinguish between class and static methods in Python and return a Boolean
类似于如何在python 3中区分实例方法、类方法、静态方法或函数?,我想确定给定的方法是类方法还是静态方法。
在这个答案中,描述了如何打印
1 2 3 4 5 6 7 8 9 10 11 12 | class Resource(object): @classmethod def parse_class(cls, string): pass @staticmethod def parse_static(string): pass # I would like to turn these print statements into Booleans print type(Resource.__dict__['parse_class']) print type(Resource.__dict__['parse_static']) |
打印输出
1 2 | <type 'classmethod'> <type 'staticmethod'> |
不过,我想更进一步,为一个方法是类还是静态方法编写一个布尔表达式。
你知道怎么做吗?(我看过types模块,但没有一个类型像
关键词
1 2 3 4 5 6 7 8 9 10 11 | In [1]: staticmethod.__class__ Out[1]: type In [2]: type(staticmethod) Out[2]: type In [3]: classmethod.__class__ Out[3]: type In [4]: type(classmethod) Out[4]: type |
这意味着您可以使用它们来比较您在示例中打印的语句:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | In [5]: class Resource(object): ...: @classmethod ...: def parse_class(cls, string): ...: pass ...: ...: @staticmethod ...: def parse_static(string): ...: pass ...: In [6]: print type(Resource.__dict__['parse_class']) == classmethod True In [7]: print type(Resource.__dict__['parse_static']) == staticmethod True |
干杯!
你想要:
1 2 | isinstance(vars(Resource)['parse_class'], classmethod) isinstance(vars(Resource)['parse_static'], staticmethod) |
使用
1 2 3 4 | import inspect inspect.ismethod(Resource.parse_class) inspect.ismethod(Resource.parse_static) |
第一个返回
或使用
1 2 3 4 | import types isinstance(Resource.parse_class, MethodType) isinstance(Resource.parse_static, MethodType) |
类型仅为