類的靜態屬性、類方法、靜態方法


          靜態屬性:

          在類的函數屬性里面,加上一個property的裝飾器,這個函數屬性就是靜態屬性,調用方式和數據屬性一樣了,不用加括號

class School:
    tag = 1
    def __init__(self,name,xiaozhang,lenth,widet):
        self.name = name
        self.xiaozhang = xiaozhang
        self.lenth = lenth
        self.widet = widet

    @property             #靜態屬性
    def test(self):
        return self.lenth*self.widet

s1 = School('xx大學',123,313,214)
print(s1.test)
print(s1.tag)

>>>66982
>>>1

        從例子看出,調用靜態屬性,和調用類的數據屬性方法一樣,這樣用戶不會發現和數據屬性有什么不同,所以靜態屬性一般用來返回類比較常用的屬性,比如一個圓的類,用戶輸入了半徑,就可以定義一個圓面積的靜態屬性,也可以定義一個周長的靜態屬性,雖然我們是通過函數的方法實現,但用戶調用的時候比較方便。

      類的函數屬性可以分成分成兩大類:

一:綁定方法(綁定給誰,誰來調用就自動將它本身當作第一個參數傳入):

    1. 綁定到類的方法:用classmethod裝飾器裝飾的方法。

                為類量身定制

                類.boud_method(),自動將類當作第一個參數傳入

              (其實對象也可調用,但仍將類當作第一個參數傳入)

    2. 綁定到對象的方法:沒有被任何裝飾器裝飾的方法(就是正常的函數屬性)

               為對象量身定制

               對象.boud_method(),自動將對象當作第一個參數傳入

             (屬於類的函數,類可以調用,但是必須按照函數的規則來,沒有自動傳值那么一說)

       所以,綁定到類的方法,就是類方法,在類的函數屬性里面,加上一個classmethod的裝飾器,這個函數屬性就是類方法,調用方式和函數屬性一樣,但是要把括號里的self改成cls

class School:
    tag = 1
    def __init__(self,name,xiaozhang,lenth,widet):
        self.name = name
        self.xiaozhang = xiaozhang
        self.lenth = lenth
        self.widet = widet

    @property             #靜態屬性
    def test(self):
        return self.lenth*self.widet

    @classmethod         #類方法
    def tell_info(cls):
        print(cls.tag)


#分別用類和實例調用
School.tell_info()

s1 = School('xx大學',123,313,214)
s1.tell_info()     #實例也可以調用,但是默認傳的第一個參數仍然是類

>>>1
>>>1

二:非綁定方法:用staticmethod裝飾器裝飾的方法

        1. 不與類或對象綁定,類和對象都可以調用,但是沒有自動傳值那么一說。就是一個普通工具而已

    注意:與綁定到對象方法區分開,在類中直接定義的函數,沒有被任何裝飾器裝飾的,都是綁定到對象的方法,可不是普通函數,對象調用該方法會自動傳值,而staticmethod裝飾的方法,不管誰來調用,都沒有自動傳值一說

          所以靜態方法,就是在類內部用staticmethod裝飾的函數,是普通函數。statimethod不與類或對象綁定,誰都可以調用,沒有自動傳值效果,staticmethod只是名義上歸屬類管理,不能使用類變量和實例變量,是類的工具包

class School:
    tag = 1
    def __init__(self,name,xiaozhang,lenth,widet):
        self.name = name
        self.xiaozhang = xiaozhang
        self.lenth = lenth
        self.widet = widet

    @property             #靜態屬性
    def test(self):
        return self.lenth*self.widet

    @classmethod         #類方法
    def tell_info(cls):
        print(cls.tag)

    @staticmethod        #靜態方法
    def test1(x,y):
        print(x*y)

#分別用類和實例調用
School.test1(3,4)
print(School.test1)

s1 = School('xx大學',123,313,214)
s1.test1(2,3)
print(s1.test1)

>>>12
>>><function School.test1 at 0x000002859750BAE8>   #就是普通函數
>>>6
>>><function School.test1 at 0x000002859750BAE8>   #就是普通函數

          后續會講到__str__和__repr__,再演示一個類方法和靜態方法的實例,先保存這篇。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM