標籤:delete 技術分享 bin 全域變數 isp SM print nbsp 使用
靜態方法
- 靜態方法只是名義上歸類管理, 實際上在靜態方法裡訪問不了類或執行個體中的任何屬性.
- 靜態方法作用:
- 把一個方法變成靜態方法, 相當於切斷了它和類的關聯, 不會自動傳self. 就是一個函數.
#!/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()
類方法
屬性方法
把一個方法變成一個靜態屬性. 調用該方法時不能加(), 要像調用一個變數時直接執行個體化對象名.方法名.
調用該方法時不能傳參數(因為沒有了())
可以賦值.
要刪掉該屬性, 需要再寫一個同名方法.注釋是@方法名.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物件導向進階