日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中自带的三个装饰器_python三个自带装饰器的功能与使用(@property、@staticmethod、@classmethod)...

發布時間:2025/3/19 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中自带的三个装饰器_python三个自带装饰器的功能与使用(@property、@staticmethod、@classmethod)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇隨筆只是記錄我對這三個裝飾器的理解,可能會有不準確的地方,敬請指出。

property裝飾器

功能:通過property裝飾器控制類的屬性的綁定與獲取,一般就是給某個屬性增加一個驗證類型等功能。

能夠通過實例直接點出屬性值來,更加方便快捷,如例三中student.age:

例一:

錯誤效果:

class Student(object):

age = 20

student = Student()

print(student.age) #打印結果為20

student.age="二十" #不應該綁定為字符串的屬性

為了避免如上行為,將代碼更改為:

例二:

class Student(object):

def __init__(self):

self._age = None

def age_getter(self): #返回屬性值

return self._age

def age_setter(self, age): #設置屬性值

if isinstance(age, str) and age.isdigit(): #驗證綁定屬性的類型

age = int(age)

if isinstance(age, int):

self._age = age

else:

raise ValueError("age is illegal") #如果不能轉換類型則拋出錯誤

student=Student()

student.age_setter("5") #綁定屬性為字符串5

print(student.age_getter()) 打印結果為5,Int格式

上述代碼解決了屬性綁定類型錯誤的問題,但是不夠方便,Python自帶的property裝飾器能夠幫助修飾代碼,如下:

例三:

class Student(object):

def __init__(self):

self._age = None

@property #裝飾age函數,可以直接將age函數作為屬性,直接通過等號綁定屬性值

def age(self):

return self._age

@age.setter #通過setter設置age的屬性,函數內部寫驗證規則

def age(self,age):

if isinstance(age,int):

self._age =age

return

if isinstance(age,str) and age.isdigit():

age = int(age)

self._age = age

else:

raise ValueError("age is illegal")

@age.deleter #deleter是刪除屬性方法

def age(self):

del self._age

student =Student()

student.age = "20"

print(student.age)

# del student.age

# print(student.age)

staticmethod裝飾器

功能:將被裝飾的函數從類中分離出來,該函數不能訪問類的屬性,簡單說可以將該函數理解為一個獨立的函數,不允許使用self。

staticmethod 就是將該被裝飾的函數與該類沒有關系,該函數不能用self傳參,需要和普通函數一樣傳參。

作用:

限制名稱空間,這個函數雖然是個普通的函數,但只有這個類里能用到

代碼易讀性.靜態方法并不需要self參數

約內存.不用每個實例都實例化方法.

在類內部控制靜態方法.不然的話換一種實現方法,把函數放在在類外部

例四:

class Dog(object):

def __init__(self,name):

self.name = name

@staticmethod

def eat(name,food):

print("%s is eating %s" %(name,food))

d = Dog("tom")

d.eat("tom","包子")

#通過對象調用方法

Dog.eat("jerry","面條")

#通過類調用方法

classmethod裝飾器,類裝飾器

例五:

class Dog(object):

name="Jerry"

def __init__(self,name):

self.name = name

@classmethod

def eat(self):

print("%s is eating %s" %(self.name,"food"))

def talk(self):

print("%s is talking" % self.name)

d = Dog("Tom")

d.eat()

Dog.eat()

工廠模式的一個方法classmethod可以用來為一個類創建一些預處理的實例.

類方法只能找類變量,不能訪問實例變量,

所以這里的name是jerry而不是實例化的tom

總結

以上是生活随笔為你收集整理的python中自带的三个装饰器_python三个自带装饰器的功能与使用(@property、@staticmethod、@classmethod)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。