day17 Python 區分函數和方法 FunctionType 、MethodType 和 type

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. 實例方法,若是是實例訪問.就是⽅法.若是是類名訪問就是函數.

"""
相關文章
相關標籤/搜索