欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

区分函数与方法

程序员文章站 2024-01-20 17:08:34
一、通过print打印区分 函数在打印的时候,显示的是function 方法在打印的时候,显示的是method 二、通过types模块MethodType,FunctionType判断 1. 实例方法 通过对象.方法名,得到的是方法类型 通过类名.方法名,得到的是函数类型 2. 静态方法 通过对象. ......

一、通过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