普通方法, 類方法 classmethod 與 靜態方法staticmethod 使用和區別.屬性函式property特性
阿新 • • 發佈:2018-11-20
普通方法, 類方法 classmethod 與 靜態方法staticmethod 使用和區別.屬性函式property特性
類方法: 使用時使用classmethod裝飾器裝飾的方法
優點: 簡潔的建立物件
對外提供簡單易懂的介面, 利用cls屬性介面示例:
class Number: def __init__(self, num1, num2): self.num1 = num1 self.num2 = num2 def add(self): return self.num1 + self.num2 def sub(self): return self.num1 - self.num2 def mul(self): return self.num1 * self.num2 def div(self): if self.num2 == 0: return None return self.num1 / self.num2 # 對外提供簡單易用的介面 @classmethod def pingfanghe(cls, num1, num2): n1 = cls(num1, num1) n12 = n1.mul() n2 = cls(num2, num2) n22 = n2.mul() n3 = cls(n12, n22) return n3.add() he = Number.pingfanghe(3, 4) print(he)
靜態方法: 使用staticmethod
裝飾器裝飾的方法(方法沒有cls引數)
對於普通方法
當例項呼叫時,預設將當前例項傳進去
類呼叫時,只能以 類名.method(類例項) 形式呼叫
總結:
凡是靜態方法完成的功能都可以是類方法完成
若方法中沒有使用到類名(cls),可以使用靜態方法
property 的特性示例:
作用: 保護特定屬性,或者對特定屬性進行處理
class User: def __init__(self, username, password): self.username = username self.__password = password # 該方法可以像成員屬性一樣訪問 @property def password(self): print('有人想檢視密碼') # return '想偷看密碼,沒門' return self.__password # 在設定密碼時,會自動呼叫 @password.setter def password(self, password): print('@password.setter', password) self.__password = '加密' + password + '加密' u = User('xiaoming', '111111') # print(u.password) # # # 設定密碼,會自動呼叫setter方法 u.password = 'abcde' print(u.password)