1. 程式人生 > >property裝飾器函數 @classmethod @staticmethod isinstance和issubclass

property裝飾器函數 @classmethod @staticmethod isinstance和issubclass

UNC func price setter ont stat 並且 init 不能

property函數 讓方法偽裝成屬性 還有一系列的裝飾器函數

 1 class Goods:
 2     __discount = 0.8
 3     def __init__(self,price):
 4         self.__price = price
 5         self.name = apple
 6 
 7     @property                 #偽裝成屬性
 8     def price(self):
 9         return self.__price * Goods.__discount
10 
11     @price.setter             #
修改折扣 12 def price(self,new): 13 self.__price = new 14 15 @price.deleter #刪除方法 16 def price(self): 17 del self.__price 18 apple = Goods(10) 19 print(apple.price) 20 print(apple.__dict__) 21 del apple.price 22 apple.price = 8 23 print(apple.price) 24 25 # print(apple.__dict__)
26 # del apple.name 27 # print(apple.__dict__)

一個方法被偽裝成屬性之後,應該可以執行一個屬性的增刪改查操作

那麽增加和修改 就對應這被setter 裝飾的方法:這個方法又必須傳一個參數比如new,表示賦值的的是等號右邊的值

刪除一個屬性 對應著被 deleter 裝飾的方法,這個方法並不能再執行的時候真的刪除這個屬性,而是你代碼中執行什麽 就有什麽效果

class A:
    def __init__(self):
        self.__f = open(aaa,w)

    @property
    def f(self):
        
return self.__f @f.deleter def f(self): self.__f.close() del self.__f # 主要註意關閉文件句柄

@classmethod

class Goods:
    __discount = 0.8           # 靜態屬性
    def __init__(self,price):
        self.__price = price   #  對象屬性
        self.name = apple
    @property
    def price(self):
        print(self)
        return self.__price * Goods.__discount
    @classmethod
    def change_discount(cls,new):       # 類方法  修改了靜態屬性
        cls.__discount = new
Goods.change_discount(0.7)
print(Goods.__dict__) 
apple = Goods(10)
banana = Goods(20)
apple.change_discount(0.7)
print(apple.price)
print(Goods)
print(banana.price)

#類方法的特點

只使用類中的資源,並且這個資源可以直接用類名引用使用(不用對象名去調用),那這個方法應該被稱為類方法

@staticmethod

class Student:

    @staticmethod
    def login(usr,pwd):
        print(IN LOGIN,usr,pwd)


Student.login(user,pwd)             變成一個普通函數



類:
靜態屬性 類 所有的對象都統一擁有的屬性
類方法 類 如果這個方法涉及到操作靜態屬性、類方法、靜態方法 cls 表示類
靜態方法 類 普通方法,不使用類中的命名空間也不使用對象的命名空間 : 一個普通的函數 沒有默認參數
方法 對象 self 表示對象
property方法 對象 slef 表示對象

isinstance 檢測對象與類之間的關系

issubclass 檢測類與類之間的關系

class A:
    conut = 1                   #靜態屬性

    def __init__(self,name):   #方法
        self.__name= name
    # @property                   #property方法
    # def name(self):
    #     return self.__name
    @classmethod
    def ppcount(cls,new):      #類方法
        cls.conut = new
    @staticmethod       #靜態方法  變成普通的函數   我的話來說 就是直接退化變垃圾了
    def func(a):
        print(alex)
p1 = A(ALEC)
print(p1.__dict__)
print(p1._A__name)

property裝飾器函數 @classmethod @staticmethod isinstance和issubclass