Python物件導向進階

來源:互聯網
上載者:User

標籤:delete   技術分享   bin   全域變數   isp   SM   print   nbsp   使用   

靜態方法

  • 靜態方法只是名義上歸類管理, 實際上在靜態方法裡訪問不了類或執行個體中的任何屬性.
  • 靜態方法作用:
    • 把一個方法變成靜態方法, 相當於切斷了它和類的關聯, 不會自動傳self. 就是一個函數.
      • a. 建立方法時不傳入參數self.
      • b. 若一定要傳入參數, 調用該方法時需要把執行個體化對象傳給自己, 才能執行.
    • 該方法必須通過類名.方法()來調用.
#!/usr/bin/python# -*- coding: utf-8 -*-"""靜態方法:    靜態方法只是名義上歸類管理, 實際上在靜態方法裡訪問不了類或執行個體中的任何屬性.靜態方法的作用:1. 把一個方法變成靜態方法, 相當於切斷了它和類的關聯, 不會自動傳self. 就是一個函數.    a. 建立方法時不傳入參數self.    b. 若一定要傳入參數, 調用該方法時需要把執行個體化對象傳給自己, 才能執行.2. 該方法必須通過類名.方法()來調用."""class Dog(object):    def __init__(self, name):        self.name = name    @staticmethod    def eat():  # TODO 這樣如果方法需要參數時豈不是不太方便?        print("a is eating")    @staticmethod    def eat(self, food):  # 在調用該方法時, 必須把執行個體傳給自己, 不會自動傳入self.即 d.eat(d, "包子")        print("%s is eating %s" %(self.name, food))d = Dog("ChenRongHua")d.eat("包子")
靜態方法

 

 

類方法

  • 只能訪問類變數(全域變數), 不能訪問執行個體變數
  • """類方法:    只能訪問類變數(全域變數), 不能訪問執行個體變數"""class Dog(object):    n = 333    def __init__(self, name):        self.name = name    @classmethod    def eat(self):  # 在調用該方法時, 必須把執行個體傳給自己, 不會自動傳入self.即 d.eat(d, "包子")        print("%s is eating %s" %(self.n, ‘dd‘))d = Dog("ChenRongHua")d.eat()
    類方法

     

屬性方法

  • 把一個方法變成一個靜態屬性. 調用該方法時不能加(), 要像調用一個變數時直接執行個體化對象名.方法名.
  • 調用該方法時不能傳參數(因為沒有了())
  • 可以賦值. 
    • 需要再寫一個同名函數(這個函數必須放在注釋為property函數的下面.), 並加註釋@方法名.setter. (有點像java中私人變數的set方法)
    • 執行個體化後給eat賦值
  • 要刪掉該屬性, 需要再寫一個同名方法.注釋是@方法名.deleter.
  • """屬性方法:    1. 把一個方法變成一個靜態屬性. 調用該方法時不能加(), 要像調用一個變數時直接執行個體化對象名.方法名.    2. 調用該方法時不能傳參數(因為沒有了())    3. 可以賦值.         a. 需要再寫一個同名函數(這個函數必須放在注釋為property函數的下面.), 並加註釋@方法名.setter. (有點像java中私人變數的set方法)        b. 執行個體化後給eat賦值    4. 要刪掉該屬性, 需要再寫一個同名方法.注釋是@方法名.deleter."""class Dog(object):    def __init__(self, name):        self.name = name        self.__food = None    @property  # 把一個方法變成一個靜態屬性    def eat(self):  # 在調用該方法時, 必須把執行個體傳給自己, 不會自動傳入self.即 d.eat(d, "包子")        print("%s is eating %s" %(self.name, self.__food))    @eat.setter  # 此同名方法必須寫在上一個eat()方法下面. 修改一個屬性.    def eat(self, food):        print("set to food: %s" % food)        self.__food = food    @eat.deleter  # 刪除一個屬性.    def eat(self):        del self.__food        print("刪完了")d = Dog("ChenRongHua")# d.eat()  # 返回‘NoneType‘ object is not callabled.eat  # 返回ChenRongHua is eating ddd.eat = "包子"  # 必須有@eat.setter方法, 才能這樣賦值, 否則報錯.d.eat  # 返回ChenRongHua is eating 包子
    屬性方法

     

 

類的特殊成員方法

  • __doc__
    • 表示類的描述資訊. 
    • 若類的下面寫有注釋, 用print方法, 可以把類的描述資訊列印出來 
class Dog(object):    """    這是一個描述資訊    """print Dog.__doc__  # 返回"  這是一個描述資訊"
__doc__
  • __module__
    • 表示當前操作的對象在哪個模組
  • __class__
    • 表示當前操作的對象的類是什麼
  • __init__
    • 構造方法, 通過類建立對象時, 自動觸發執行
  • __del__
    • 析構方法, 當對象在記憶體中被釋放時, 自動觸發執行
    • 注: 此方法一般無須定義, 因為python是一門進階語言, 程式員在使用時無需關心記憶體的分配和釋放, 因為此工作都是交給python解譯器來執行, 所以, 解構函式的調用是由解譯器在進行記憶體回收時自動觸發執行的.
  • __call__
    • 對象後面加括弧 , 觸發執行
    • 注: 構造方法的執行時由建立對象觸發的, 即: 對象 = 類名(); 而對於__call__方法的執行時由對象後加括弧觸發的, 即: 對象()  或 類().
  • __dict__
    • 查看類或對象中的所有成員
      • 通過類來調用: 列印類裡的所有屬性, 不包括執行個體屬性
      • 通過對象調用, 列印所有執行個體屬性, 不包括類屬性
  • __str__
    • 如果一個類中定義了__str__方法, 那麼在列印對象時, 預設輸出該方法的傳回值.
  • __getitem__,  __setitem__,  __delitem__
    • 用於索引操作, 如字典. 以上分別表示擷取, 設定, 刪除資料 (類似java中的set, get方法)
    • 可以實現把字典封裝成一個執行個體, 而且使用者不能隨意刪除其中屬性(key)
  • __new__ \ __metaclass__

 

Python物件導向進階

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.