靜態方法staticmethod和類方法classmethod 一、類方法classmethod 把一個方法變成一個類中的方法,這個方法可以直接利用類來調用,不需要依托任何的對象,即不需要實例化也可以做一些改變 當這個方法的操作只涉及靜態屬性的時候,就應該使用classmethod來裝飾這個方法 運 ...
靜態方法staticmethod和類方法classmethod
一、類方法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)
運行結果:
4.0 2.5
二、靜態方法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() # 使用類直接去調用靜態方法
三、小結
- 類方法和靜態方法都是用類直接調用的,都可以不進行實例化就可以做相關操作
- 對象也可以調用類方法和靜態方法(指針指向類),但是一般推薦使用類名調用
- 類方法有一個預設參數cls,代表這個類
- 靜態方法沒有預設參數,像函數一樣