Python面向對象靜態方法,類方法,屬性方法

靜態方法(staticmethod名義上歸類管理,實際上在靜態方法裏訪問不到類或實例中的靜態屬性)

 1 class days(object):
 2     def __init__(self, food):
 3         self.food = food
 4 
 5     @staticmethod  # 實際和類沒有關係
 6     def tell(self):
 7         print('這裏有%s,%s快來' % (self.food, 'name'))
 8 
 9 
10 a = days('香蕉')
11 a.tell(a)

類方法(classmethod只能訪問類變量,不能訪問實例變量)

 1 lass f2(object):
 2     name = '大哥大大'  # 類變量
 3 
 4     def __init__(self, name):
 5         self.name = name
 6 
 7     @classmethod
 8     def eat(self):
 9         print('這裏有%s,【%s】' % (self.name, '類的方法'))
10 
11 
12 f2.eat()

屬性方法(把一個方法變成一個靜態屬性)

由屬性的定義和調用要注意一下幾點: 1 定義時,在普通方法的基礎上添加 @property 裝飾器; 2 定義時,屬性僅有一個self參數 3 調用時,無需括號 屬性的定義有兩種方式: 1 裝飾器 即:在方法上應用裝飾器 2 靜態字段 即:在類中定義值爲property對象的靜態字段

經典類,具備一種@property裝飾器:

 1 class f3(object):
 2     def __init__(self, name):
 3         self.name = name
 4         self.__food = None
 5 
 6     @property
 7     def eat2(self):
 8         print('這裏%s,【%s】' % (self.name, '在幹什麼'))
 9 
10 
11 c = f3('阿豬')
12 c.eat2

新式類,具備三種@property裝飾器,分別對應了三個被@property、@方法名.setter、@方法名.deleter修飾的方法。

 1 class f4(object):
 2     def __init__(self, name):
 3         self.name = name
 4         self.__food = None
 5 
 6     @property  # 把一個普通方法變爲屬性方法,獲取
 7     def eat(self):
 8         print('這裏%s,【%s】' % (self.name, self.__food))  # 因爲沒有參數self.__food在這沒有調用
 9 
10     @eat.setter  # 修改
11     def eat(self, food):
12         print('我要吃%s' % food)
13         self.__food = food
14 
15     @eat.getter  # 刪除
16     def eat(self):
17         del self.__food
18         print('刪除字段self.__food')
19 
20 
21 d = f4('阿豪')
22 d.eat
23 d.eat = '餃子'
24 del d.eat
25 d.eat
相關文章
相關標籤/搜索