property裝飾器函數 @classmethod @staticmethod isinstance和issubclass
阿新 • • 發佈:2018-09-01
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