property classmethod staticmethod的用法
阿新 • • 發佈:2018-04-18
urn 刪除 alex ice faild pan hang view 技術
一:property的用法
1,@property 能夠將一個方法偽裝成一個屬性,它並不會讓你的代碼有什麽邏輯上的提高,只是從調用者的角度上換了一種方式,使之看起來更合理。調用方法從原來的的對象名.方法名(),變成了對象名.方法名。
class Person: def __init__(self,name,weight,height): self.name = name self.__height = height self.__weight = weight @property def bmi(self):View Codereturn self.__weight / self.__height ** 2 p = Person(‘ads‘,70,1.75) print(p.bmi)
2,方法偽裝成的屬性的修改
class Person: def __init__(self,n): self.__name = n # 私有的屬性了 @property def name(self): return self.__name @name.setter # 重要程度 *** def name(self,new_name):View Codeif type(new_name) is str: self.__name = new_name else: print(‘您提供的姓名數據類型不合法‘) p = Person(‘alex‘) print(p.name) #def name(self): p.name = ‘alex_sb‘ #def name(self,new_name): print(p.name) #def name(self):
3,方法偽裝成的屬性的刪除
class Person: def __init__View Code(self,n): self.__name = n # 私有的屬性了 @property # 重要程度 **** def name(self): return self.__name @name.deleter def name(self): del self.__name p = Person(‘alex‘) print(p.name) del p.name
ps:
@property --> func 將方法偽裝成屬性,只觀看的事兒
@func.setter --> func 對偽裝的屬性進行賦值的時候調用這個方法 一般情況下用來做修改
@func.deleter --> func 在執行del 對象.func的時候調用這個方法 一般情況下用來做刪除 基本不用
二:classmethod的用法
1,@classmethod ,類方法,可以直接被類調用,不需要默認傳對象參數,只需要傳一個類參數就可以了。
class Goods: __discount = 0.8 def __init__(self,name,origin_price): self.name = name self.__price = origin_price @property def price(self): return self.__price * Goods.__discount @classmethod def change_discount(cls,new_discount): cls.__discount = new_discount Goods.change_discount(1) # 不依賴對象的方法 就應該定義成類方法 類方法可以任意的操作類中的靜態變量 # 如果要改變折扣 是全場的事情 不牽扯到一個具體的物品 所以不應該使用對象來調用這個方法 apple = Goods(‘apple‘,5) banana = Goods(‘banana‘,8) print(apple.price) print(banana.price)View Code
三:staticmethod的用法
當一個方法要使用對象的屬性時 就是用普通的方法
當一個方法要使用類中的靜態屬性時 就是用類方法
當一個方法要既不使用對象的屬性也不使用類中的靜態屬性時,就可以使用staticmethod靜態方法
class Student: def __init__(self,name):pass @staticmethod def login(a): # login就是一個類中的靜態方法 靜態方法沒有默認參數 就當成普通的函數使用即可 user = input(‘user :‘) if user == ‘alex‘: print(‘success‘) else: print(‘faild‘) Student.login(1)View Code
property classmethod staticmethod的用法