1. 程式人生 > >property classmethod staticmethod的用法

property classmethod staticmethod的用法

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):
        
return self.__weight / self.__height ** 2 p = Person(ads,70,1.75) print(p.bmi)
View Code

2,方法偽裝成的屬性的修改

技術分享圖片
class Person:
    def __init__(self,n):
        self.__name = n  # 私有的屬性了
    @property
    def name(self):
        return self.__name

    @name.setter        # 重要程度 ***
    def name(self,new_name):
        
if 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):
View Code

3,方法偽裝成的屬性的刪除

技術分享圖片
class Person:
    def __init__
(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
View Code

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的用法