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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章