from types import FunctionType, MethodType
class Car(object):
def __init__(self):
pass
def run(self):
print("my car can run!")
@staticmethod
def fly(self):
print("my car can fly!")
@classmethod
def jumk(cls):
print("my car can jumk!")
c = Car()
# type(obj) 表示查看obj是由哪个类创建的.
# 实例方法
print(type(c.run)) # <class 'method'>
print(type(Car.run)) # <class 'function'>
# 静态方法
print(type(c.fly)) # <class 'function'>
print(type(Car.fly)) # <class 'function'>
# 类方法,因为类在内存中也是对象,所以调用类方法都是方法类型
print(type(c.jumk)) # <class 'method'>
print(type(Car.jumk)) # <class 'method'>
# 使用FunctionType, MethodType 来判断类型
# 实例方法
print(isinstance(c.run,MethodType)) # True
print(isinstance(Car.run,FunctionType)) # True
# 静态方法
print(isinstance(c.fly,FunctionType)) # True
print(isinstance(Car.fly,FunctionType)) # True
# 类方法
print(isinstance(c.jumk,MethodType)) # True
print(isinstance(Car.jumk,MethodType)) # True
总结结论:
1. 类⽅法.不论任何情况,都是⽅法.
2. 静态方法,不论任何情况.都是函数
3. 实例方法,如果是实例访问.就是⽅法.如果是类名访问就是函数.