靜態方法staticmethod和類方法classmethod

靜態方法staticmethod和類方法classmethodapp

 

1、類方法classmethod函數

  • 把一個方法變成一個類中的方法,這個方法能夠直接利用類來調用,不須要依託任何的對象,即不須要實例化也能夠作一些改變
  • 當這個方法的操做只涉及靜態屬性的時候,就應該使用classmethod來裝飾這個方法
class Goods:
    __discount = 0.8  # 靜態私有屬性
    def __init__(self,name,price):
        self.name = name
        self.__price = price  # price 私有化
    @property  # 將price方法假裝成屬性,類外直接調用函數,執行私有屬性的一些操做
    def price(self):  # 不用傳參數
        return self.__price * Goods.__discount
    @classmethod  # 把一個方法變成類中的方法,這個方法能夠在類外直接被類調用,而不須要依託任何對象,即不用實例化也能夠
    def change_discount(cls,new_discount):  # 修改折扣
        cls.__discount = new_discount
apple = Goods('蘋果',5)  # 實例化
print(apple.price)
Goods.change_discount(0.5)  # 這裏能夠直接用類Goods來調用,不須要依託apple來調用
print(apple.price)

運行結果:spa

4.0
2.5

 

2、靜態方法staticmetho指針

  • 在徹底面向對象的程序中,若是一個函數既和對象沒有關係也和類沒有關係,那麼就用staticmethod將這個函數變成靜態方法
class Login:
    def __init__(self,name,password):
        self.name = name
        self.pwd = password
    def login(self): pass
    @staticmethod
    def get_usr_pwd():  # 這裏能夠傳參數,可是不是特殊的參數,就一些普通的參數
        # 本來是和類和對象都無關的函數方法,可是如今是類中的靜態方法了
        usr = input('用戶名: ')
        pwd = input('密碼: ')
        Login(usr,pwd)
Login.get_usr_pwd()  # 使用類直接去調用靜態方法

 

3、小結code

  • 類方法和靜態方法都是用類直接調用的,均可以不進行實例化就能夠作相關操做
  • 對象也能夠調用類方法和靜態方法(指針指向類),可是通常推薦使用類名調用
  • 類方法有一個默認參數cls,表明這個類
  • 靜態方法沒有默認參數,像函數同樣
相關文章
相關標籤/搜索