Python裝飾器 類方法與靜態方法

2021-10-18 13:13:54 字數 1525 閱讀 1442

@classmethod 類方法

@staticmethod 靜態方法

1、類方法與靜態方法

class recatangle:   # 新建乙個長方形的類

def __init__(self, length, width):

self.length = length

self.width = width

# 只能由例項呼叫,稱為例項方法

def permeter(self):

return (self.length + self.width)*2

# 只能由例項呼叫,稱為例項方法

def area(self):

return self.length * self.width

# 裝飾器,表示下面的方法是類方法

@classmethod

def features(cls):

print('兩邊的長相等,兩邊的寬也相等,長和寬的角度為90°')

# 裝飾器,表示下面的方法是靜態方法

# 靜態方法本質上是函式,只是寫在了類裡面

@staticmethod

def sumdata(a, b):

return a + b

2、類/靜態方法既可以由例項呼叫,也可以由類呼叫

rec = recatangle(6, 4)   # 例項化乙個長方形

rec.permeter() # 呼叫周長計算公式方法

rec.area() # 呼叫面積計算公式方法

rec.features() # 呼叫類方法,由例項呼叫

recatangle.features() # 呼叫類方法,由類呼叫

rec.sumdata(10, 10) # 呼叫靜態方法,由例項呼叫

recatangle.sumdata(10, 10) # 呼叫靜態方法,由類呼叫

3、可以用type的方式檢視是方法還是函式

print(type(rec.features))   # 類方法是method

print(type(rec.sumdata)) # 靜態方法是function

# 輸出:

# #

4、inspect模組,python的自檢模組,可以判斷某個物件是否是某種型別,返回值是布林型

import inspect

print(inspect.ismethod(rec.features)) # 判斷某個物件是否是method

print(inspect.isfunction(rec.sumdata)) # 判斷某個物件是否是function

print(inspect.isclass(recatangle)) # 判斷某個物件是否是class

# 輸出:

# true

# true

# true

裝飾類方法和靜態方法

裝飾類方法或靜態方法是很簡單的,不過要確保裝飾器在 classmethod 或 staticmethod 之前。import time from functools import wraps def timethis func wraps func start time.time r func ar...

python裝飾器 函式裝飾器,類裝飾器

只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...

python 裝飾器 函式裝飾器 類裝飾器

python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...