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

歡迎訪問 生活随笔!

生活随笔

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

python

Python类方法、实例方法、静态方法和属性方法详解

發布時間:2025/3/15 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python类方法、实例方法、静态方法和属性方法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

靜態方法(可調類變量、可被實例調用、可被類調用)

1、用 @staticmethod 裝飾的不帶 self 參數的方法叫做靜態方法,類的靜態方法可以沒有參數,可以直接使用類名調用

2、靜態方法名義上歸類管理,實際中在靜態方法中無法訪問類和實例中的任何屬性

3、調用時并不需要傳遞類或者實例。像我們在類外定義的函數,只不過靜態方法可以通過類或者實例來調用而已

#實驗證明eat靜態方法里不能傳self對象,因此無法調用實例變量import requests,json class Dog(object):food='牛肉'name='大黃狗'def __init__(self, name):self.name = name@staticmethoddef eat(self):print('%s eat %s' %(self.name,Dog.food)) d = Dog("拉布拉多") d.eat() Dog.eat()"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py Traceback (most recent call last):File "C:/Users/wangli/PycharmProjects/Test/Test/test.py", line 104, in <module>d.eat() TypeError: eat() missing 1 required positional argument: 'self'Process finished with exit code 1 #實驗證明eat靜態方法,可由類和實例調用,可使用類變量class Dog(object):food='牛肉'name='大黃狗'def __init__(self, name):self.name = name@staticmethoddef eat(who):print('%s %s eat %s' %(who,Dog.name,Dog.food)) d = Dog("拉布拉多") d.eat('橙子家') Dog.eat('橘子家')"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py 橙子家 大黃狗 eat 牛肉 橘子家 大黃狗 eat 牛肉Process finished with exit code 0

類方法(可調類變量、可被實例調用、可被類調用)

1、類方法通過@classmethod裝飾器實現,類方法和普通方法的區別是, 類方法只能訪問類變量,不能訪問實例變量

2、通過cls參數傳遞當前類對象,不需要實例化,直接通過類對象【實例名.方法名】和類對象實例【類名.方法名】訪問

實驗證明: 通過cls參數傳遞當前類對象,不需要實例化,直接類名.方法名() 通過類對象和類對象實例訪問import requests,json class Dog(object):food='牛肉'name='大黃狗'def __init__(self, name):self.name = name@classmethoddef eat(cls,who):print('%s %s eat %s' %(who,cls.name,Dog.food)) d = Dog("大白狗") d.eat('橙子家') Dog.eat('橘子家')"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py 橙子家 大黃狗 eat 牛肉 橘子家 大黃狗 eat 牛肉Process finished with exit code 0 實驗證明: 類方法只能訪問類變量,不能訪問實例變量class Dog(object):food='牛肉'#name='大黃狗'def __init__(self, name):self.name = name@classmethoddef eat(self,who):print('%s %s eat %s' %(who,self.name,Dog.food)) d = Dog("大白狗") d.eat('橙子家') Dog.eat('橘子家')"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py Traceback (most recent call last):File "C:/Users/wangli/PycharmProjects/Test/Test/test.py", line 104, in <module>d.eat('橙子家')File "C:/Users/wangli/PycharmProjects/Test/Test/test.py", line 102, in eatprint('%s %s eat %s' %(who,self.name,Dog.food)) AttributeError: type object 'Dog' has no attribute 'name'Process finished with exit code 1

類實例方法(可調類變量、可調實例變量、可被實例調用)

1、第一個參數強制為類實例對象self,可以通過這個類實例對象訪問類屬性self.name,可以通過類實例對象的__class__屬性訪問類屬性__class__.name。

2、類的初始化方法__init__也是實例方法,在實例創建的時候自動調用

實驗證明: 實例方法可調用類變量和實例變量class Dog(object):food='牛肉'name='大黃狗'def __init__(self, name):self.name = namedef eat(self,who): #實例方法print('%s %s eat %s' %(who,self.name,Dog.food)) d = Dog("大白狗") d.eat('橙子家')"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py 橙子家 大白狗 eat 牛肉Process finished with exit code 0

屬性方法(可調類變量、可調實例變量、可被實例調用)

1、屬性方法,把一個方法變成靜態屬性,可以調類的實例變量和類變量

給 屬性方法賦值class Dog(object):def __init__(self, name):self.name = nameself.__food = None@propertydef eat(self):print('%s eat %s' %(self.name,self.__food))@eat.setterdef eat(self, food):self.__food = food d = Dog("labuladuo") d.eat d.eat = "baozi" d.eat"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py wang eat None wang eat baoziProcess finished with exit code 0 屬性方法應用場景 比如 ,你想知道一個航班當前的狀態,是到達了、延遲了、取消了、還是已經飛走了, 想知道這種狀態你必須經歷以下幾步:1. 連接航空公司API查詢2. 對查詢結果進行解析 3. 返回結果給你的用戶因此這個status屬性的值是一系列動作后才得到的結果,所以你每次調用時,其實它都要經過一系列的動作才返回你結果,但這些動作過程不需要用戶關心, 用戶只需要調用這個屬性就可以import requests,json class Flight(object):def __init__(self,name):self.flight_name = namedef checking_status(self):print("checking flight %s status " % self.flight_name)return 1@propertydef flight_status(self):status = self.checking_status()if status == 0 :print("flight got canceled...")elif status == 1 :print("flight is arrived...")elif status == 2:print("flight has departured already...")else:print("cannot confirm the flight status...,please check later")@flight_status.setterdef flight_status(self,status):print('fight %s has changed status to %s'%(self.flight_name,status)) f = Flight("CA980") f.flight_status f.flight_status=2"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py checking flight CA980 status flight is arrived... fight CA980 has changed status to 2Process finished with exit code 0

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Python类方法、实例方法、静态方法和属性方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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