類的封裝,類內的方法裝飾器,類的方法修改與刪除裝飾器,經典類和新式類

6.20自我總結

1.類的封裝

封裝:隱藏屬性或方法,外部沒法使用,內部可使用,在類定義階段就執行了,真的想引用,就使用_類名__屬性名
#好比
class YwY:
    __name = 1 #其等同於作了這一層處理_YwY__name = 1
a = YwY()
print(a.__name)
#會報錯,類外面無法直接引用類裏面隱藏的變量
#咱們若是直接用類來引用這個變量
#全部咱們真的要拿裏面的變量的話
prnt(a._YwY__name)
    
# 隱藏模塊內的函數/變量_x:from module import *(沒法導入), from module import _x(不合理)
如
class YwY:
    def __func():#其等同於作了這一層處理def _YwY__func()
        pass
#封裝後咱們要在類內部使用封裝後的變量或者變量名,咱們能夠直接導入他的變量名或者函數名便可
class YwY:
    __name = 1
    def __one(self):
        print('1')
    def __two(self):
        print('1')
    def func(self):
        print(self.__name)
        self.__one()
        self.__two()
a = YwY()
a.func()

2.類的方法修改與刪除裝飾器

1.@property

# @property:被 @property 裝飾的函數會從函數變成屬性,也就是說直接.函數名,不須要加括號使用
#以下
class Func:
    @property
    def a(self):
        print('1')
a = Func()
a.a
#1

2.@方法名.setter/@方法名.price.deleter

# @方法名.setter:被 @方法名.setter 裝飾的函數裝飾函數名字必須和方法名字相同,方法名修改,會執行這個裝飾的函數,
#coding=utf-8
# ############### 定義 ###############
class Goods:
    """python3中默認繼承object類
        以python二、3執行此程序的結果不一樣,由於只有在python3中才有@xxx.setter  @xxx.deleter
    """

    @property    #方法必須先進行@property
    def price(self):
        print('@property')

    @price.setter
    def price(self, value):  #函數名必須和方法相同
        print('@price.setter')

    @price.deleter
    def price(self):
        print('@price.deleter')


# ############### 調用 ###############
obj = Goods()
obj.price  # 自動執行 @property 修飾的 price 方法,並獲取方法的返回值
obj.price = 123  # 自動執行 @price.setter 修飾的 price 方法,並將  123 賦值給方法的參數
del obj.price  # 自動執行 @price.deleter 修飾的 price 方法

3.注意

  • 經典類中的屬性只有一種訪問方式,其對應被 @property 修飾的方法
  • 新式類中的屬性有三種訪問方式,並分別對應了三個被 @property、@方法名.setter、@方法名.deleter 修飾的方法

因爲新式類中具備三種訪問方式,咱們能夠根據它們幾個屬性的訪問特色,分別將三個方法定義爲對同一個屬性:獲取、修改、刪除python

3.類的方法綁定

# 對象的綁定方法:沒有加任何裝飾的方法就是對象的綁定方法
# 類的綁定方法:加了@classmethod裝飾器的方法就是類的綁定方法,裏面的形參必須是cls而不是self,約定俗稱
# 非綁定方法:加了@staticmethod裝飾器的方法就是非綁定方法,其實就是一個普通的函數,裏面的self沒有意義

4.經典類和新式類

1.定義

  • 在python2中,若是明確寫了繼承object,那麼這個類就是新式類;若是沒有寫,那麼就是舊式類(經典類)。
  • 在python3中,無論寫沒寫object,這個類都是新式類。

2.調用順序

經典類是深度優先函數

http://images.cnblogs.com/cnblogs_com/pythonywy/1452728/o_%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20190620193423.png

新式類是廣度優先code

http://images.cnblogs.com/cnblogs_com/pythonywy/1452728/o_%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20190620193406.png

相關文章
相關標籤/搜索