python3類方法與靜態方法


靜態⽅法和類⽅法

轉載於:https://blog.csdn.net/qq_41020281/article/details/79634707

1. 類⽅法

是類對象所擁有的⽅法,需要⽤修飾器 @classmethod 來標識其為類⽅法, 對於類⽅法,第⼀個參數必須是類對象,⼀般以 cls 作為第⼀個參數(當然 可以⽤其他名稱的變量作為其第⼀個參數,但是⼤部分⼈都習慣以'cls'作為第 ⼀個參數的名字,就最好⽤'cls'了),能夠通過實例對象和類對象去訪問。

class People(object):
    country = 'china'
    #類⽅法,⽤classmethod來進⾏修飾
    @classmethod
    def getCountry(cls):
        return cls.country
p = People()
print p.getCountry() #可以⽤過實例對象引⽤
print People.getCountry() #可以通過類對象引⽤

類⽅法還有⼀個⽤途就是可以對類屬性進⾏修改:

class People(object):
    country = 'china'
    #類⽅法,⽤classmethod來進⾏修飾
    @classmethod
    def getCountry(cls):
        return cls.country
    @classmethod
    def setCountry(cls,country):

        cls.country = country
p = People()
print p.getCountry() #可以⽤過實例對象引⽤
print People.getCountry() #可以通過類對象引⽤
p.setCountry('japan')
print p.getCountry()
print People.getCountry()

結果顯示在⽤類⽅法對類屬性修改之后,通過類對象和實例對象訪問都發⽣ 了改變

2. 靜態⽅法

需要通過修飾器 @staticmethod 來進⾏修飾,靜態⽅法不需要多定義參數

class People(object):
    country = 'china'
    @staticmethod
    #靜態⽅法
    def getCountry():
        return People.country
print People.getCountry()

總結 從類⽅法和實例⽅法以及靜態⽅法的定義形式就可以看出來,類⽅法的第⼀ 個參數是類對象cls,那么通過cls引⽤的必定是類對象的屬性和⽅法;⽽實例 ⽅法的第⼀個參數是實例對象self,那么通過self引⽤的可能是類屬性、也有 可能是實例屬性(這個需要具體分析),不過在存在相同名稱的類屬性和實 例屬性的情況下,實例屬性優先級更⾼。靜態⽅法中不需要額外定義參數, 因此在靜態⽅法中引⽤類屬性的話,必須通過類對象來引⽤


免責聲明!

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



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