普通方法, 類方法 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)