Python类方法、实例方法、静态方法和属性方法详解
生活随笔
收集整理的這篇文章主要介紹了
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类方法、实例方法、静态方法和属性方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php页面之间传值_php如何在不同页面
- 下一篇: Python测试开发django5.ur