面向?qū)ο?--靜態(tài)方法、類方法、屬性方法

方法

普通方法、靜態(tài)方法和類方法,三種方法在內(nèi)存中都歸屬于類,區(qū)別在于調(diào)用方式不同。

  • 普通方法:由對象調(diào)用;至少一個self參數(shù);執(zhí)行普通方法時,自動將調(diào)用該方法的對象賦值給self;
  • 類方法:由類調(diào)用; 至少一個cls參數(shù);執(zhí)行類方法時,自動將該類賦給cls;
  • 靜態(tài)方法:由類調(diào)用;無默認參數(shù);
class Foo(object):
    def __init__(self,name):
        self.name = name

    def ord_func(self):
        print("普通方法")

    @classmethod
    def class_func(cls):
        """定義類方法,至少一個cls參數(shù)"""
        print("類方法")

    @staticmethod
    def static_func():
        """定義靜態(tài)方法,無默認參數(shù)"""
        print("靜態(tài)方法")


#調(diào)用普通方法
f = Foo('wupeiqi')
f.ord_func()

#調(diào)用類方法(類方法只能通過cls訪問類屬性)
Foo.class_func()

#調(diào)用靜態(tài)方法(一個通過類調(diào)用的普通函數(shù),不能直接訪問類的任何屬性或方法)
Foo.static_func()

相同點:對于所有的方法而言,均屬于類(非對象)中,所以,在內(nèi)存中也只保存一份。
不同點:方法調(diào)用者不同、調(diào)用方法時自動傳入的參數(shù)不同。

屬性方法

@property裝飾器可以使被裝飾的方法成為一個屬性,類似其他語言的get方法

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.__score  = score
    @property                         #實例.score  調(diào)用
    def score(self):                 
        return self.__score
    @score.setter                     #實例.score = value  調(diào)用
    def score(self,score):
        if score < 0 or score > 100:
            raise ValueError('invalid score')
        self.__score = score
    @score.deleter                    #del 實例.score    調(diào)用
    def score(self):
        del self.__score
        print("score is deleted")

s = Student('Bob',59)
s.score = 60     #將60 賦給score  1
print(s.score)
# s.score = 1000  #將會觸發(fā)異常   2
del s.score

60
score is deleted

從上面可以看出,通過@property裝飾的屬性方法能夠?qū)傩苑庋b更多想要的操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,789評論 0 9
  • 原文出處:南峰子的技術(shù)博客 Objective-C語言是一門動態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時期做的事放到了...
    _燴面_閱讀 1,270評論 1 5
  • Objective-C語言是一門動態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時期做的事放到了運行時來處理。這種動態(tài)語言的...
    有一種再見叫青春閱讀 612評論 0 3
  • Objective-C語言是一門動態(tài)語言,他將很多靜態(tài)語言在編譯和鏈接時期做的事情放到了運行時來處理。這種動態(tài)語言...
    tigger丨閱讀 1,439評論 0 8
  • 你說我欠你一個告白,遲遲不見;我說你有了我所有陪伴,經(jīng)久不散。給你的Stella,卻是給我的陽光和星辰:雪色琉璃,...
    致此終年閱讀 197評論 0 0