1. 程式人生 > >普通方法, 類方法 classmethod 與 靜態方法staticmethod 使用和區別.屬性函式property特性

普通方法, 類方法 classmethod 與 靜態方法staticmethod 使用和區別.屬性函式property特性

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