区分函数与方法

2018-11-12 06:52:08来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

一、通过print打印区分

  • 函数在打印的时候,显示的是function
  • 方法在打印的时候,显示的是method
def func():
    pass

class Animal(object):

    def run(self):
        pass

print(func)  # <function func at 0x0000022343CD1F28>

c = Animal()
print(c.run)  # <bound method Animal.run of <__main__.Animal object at 0x0000022344128400>>

 二、通过types模块MethodType,FunctionType判断

1. 实例方法

  • 通过对象.方法名,得到的是方法类型
  • 通过类名.方法名,得到的是函数类型
from types import FunctionType, MethodType


class Foo(object):

    def run(self):
        pass


fn = Foo()
print(isinstance(fn.run, MethodType))     # True
print(isinstance(Foo.run, FunctionType))  # True

 

2. 静态方法

  • 通过对象.方法名,得到的是函数类型
  • 通过类名.方法名,得到的是函数类型
from types import FunctionType, MethodType


class Foo(object):

    @staticmethod
    def run():
        pass

fn = Foo()
print(isinstance(fn.run, FunctionType))   # True
print(isinstance(Foo.run, FunctionType))  # True

 

3. 类方法

  • 通过对象.方法名,得到的是方法类型
  • 通过类名.方法名,得到的是方法类型
from types import FunctionType, MethodType


class Foo(object):

    @classmethod
    def run(cls):
        pass

fn = Foo()
print(isinstance(fn.run, MethodType))   # True
print(isinstance(Foo.run, MethodType))  # True

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Python3 图像识别(一)

下一篇:Django 笔记(六)mysql增删改查