1. 程式人生 > >@property @classmethod @staticmethod

@property @classmethod @staticmethod

spa 方法 推薦 word prope def 一個 __init__ color




Python內置的@property裝飾器就是負責把一個方法變成屬性調用的
from math import pi
# class Circle(): # def __init__(self,r,name): # self.r = r # self.name = name # @property # def chang(self): # # return 2*pi*self.r # @property # def area(self): # return self.r**2*pi #
c1 = Circle(3,"小張") # # print(c1.r) # print(c1.name) # print(c1.chang) # print(c1.area) # class Goods: # __discount = 0.8 # num=200 # def __init__(self,name,price): # self.name = name # self.__price = price # @property # def price(self): # return self.__price * Goods.__discount
# @classmethod # 把一個方法 變成一個類中的方法,這個方法就直接可以被類調用,不需要依托任何對象 # def change_discount(cls,new_discount): # 修改折扣 類方法默認有一個參數cls代表這個類 # cls.__discount = new_discount # cls.num = 100000 # apple = Goods(‘蘋果‘,5) # print(apple.price) # Goods.change_discount(0.5) # 類調用 # print(apple.price) #
apple.change_discount(10) #對象調用 # print(apple.price) # print(Goods.num) # print(apple.num) # 當這個方法的操作只涉及靜態屬性的時候 就應該使用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()#不需要實例化對象,直接類名調用方法 # 在完全面向對象的程序中, # 如果一個函數 既和對象沒有關系 也和類沒有關系 那麽就用staticmethod將這個函數變成一個靜態方法 # # 類方法和靜態方法 都是類調用的 # 對象可以調用類方法和靜態方法麽? 可以 一般情況下 推薦用類名調用 # 類方法 有一個默認參數 cls 代表這個類 cls # 靜態方法 沒有默認的參數 就象函數一樣

 

@property @classmethod @staticmethod