property classmethod staticmethod的用法
一:property的用法
1,@property 能夠?qū)⒁粋€方法偽裝成一個屬性,它并不會讓你的代碼有什么邏輯上的提高,只是從調(diào)用者的角度上換了一種方式,使之看起來更合理。調(diào)用方法從原來的的對象名.方法名(),變成了對象名.方法名。
class Person:def __init__(self,name,weight,height):self.name = nameself.__height = heightself.__weight = weight@propertydef bmi(self):return self.__weight / self.__height ** 2 p = Person('ads',70,1.75) print(p.bmi) View Code2,方法偽裝成的屬性的修改
class Person:def __init__(self,n):self.__name = n # 私有的屬性了 @propertydef name(self):return self.__name@name.setter # 重要程度 ***def name(self,new_name):if type(new_name) is str:self.__name = new_nameelse:print('您提供的姓名數(shù)據(jù)類型不合法')p = Person('alex') print(p.name) #def name(self): p.name = 'alex_sb' #def name(self,new_name): print(p.name) #def name(self): View Code3,方法偽裝成的屬性的刪除
class Person:def __init__(self,n):self.__name = n # 私有的屬性了@property # 重要程度 ****def name(self):return self.__name@name.deleterdef name(self):del self.__namep = Person('alex') print(p.name) del p.name View Codeps:
@property --> func 將方法偽裝成屬性,只觀看的事兒
@func.setter --> func 對偽裝的屬性進行賦值的時候調(diào)用這個方法 一般情況下用來做修改
@func.deleter --> func 在執(zhí)行del 對象.func的時候調(diào)用這個方法 一般情況下用來做刪除 基本不用
二:classmethod的用法
1,@classmethod ,類方法,可以直接被類調(diào)用,不需要默認傳對象參數(shù),只需要傳一個類參數(shù)就可以了。
class Goods:__discount = 0.8def __init__(self,name,origin_price):self.name = nameself.__price = origin_price@propertydef price(self):return self.__price * Goods.__discount@classmethoddef change_discount(cls,new_discount):cls.__discount = new_discountGoods.change_discount(1) # 不依賴對象的方法 就應該定義成類方法 類方法可以任意的操作類中的靜態(tài)變量 # 如果要改變折扣 是全場的事情 不牽扯到一個具體的物品 所以不應該使用對象來調(diào)用這個方法 apple = Goods('apple',5) banana = Goods('banana',8) print(apple.price) print(banana.price) View Code三:staticmethod的用法
當一個方法要使用對象的屬性時 就是用普通的方法
當一個方法要使用類中的靜態(tài)屬性時 就是用類方法
當一個方法要既不使用對象的屬性也不使用類中的靜態(tài)屬性時,就可以使用staticmethod靜態(tài)方法
class Student:def __init__(self,name):pass@staticmethoddef login(a):# login就是一個類中的靜態(tài)方法 靜態(tài)方法沒有默認參數(shù) 就當成普通的函數(shù)使用即可user = input('user :')if user == 'alex':print('success')else:print('faild')Student.login(1) View Code?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/leiwei123/p/8874366.html
總結(jié)
以上是生活随笔為你收集整理的property classmethod staticmethod的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux20180416四周第一次课(
- 下一篇: react源代码重点难点分析