乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      在python的class中的,self到底是什么?

       刮骨劍 2019-07-11

      答案:self可以理解為一個字典變量,內部存的就是對象的數(shù)據(jù)屬性。如:{'name':'zhang','age':'18'}就是這些。

      注意只有數(shù)據(jù)屬性,并沒有創(chuàng)建新的類的方法。  類----->通過實例化生成----對象---->(對象只是一串類似于字典的數(shù)據(jù),沒有把類的里的方法復制給你,python沒有new這個方法?。?/strong>

      在python2中分為

      經(jīng)典類:

      class Box:

        pass

      新式類:

      class Box(object):

        pass

       

      在python3中,只有新式類:

      class Box:

        pass

       

      在python的class中的,self到底是什么?

       

      上實例:

      class.py

      復制代碼
       1 class Box:
       2     def __init__(self, boxname, size, color):
       3         self.boxname = boxname
       4         self.size = size
       5         self.color = color  # self就是用于存儲對象屬性的集合,就算沒有屬性self也是必備的
       6 
       7     def open(self, myself):
       8         print('-->用自己的myself,打開那個%s,%s的%s' % (myself.color, myself.size, myself.boxname))
       9         print('-->用類自己的self,打開那個%s,%s的%s' % (myself.color, myself.size, myself.boxname))
      10 
      11     def close(self):
      12         print('-->關閉%s,謝謝' % self.boxname)
      13 
      14 
      15 b = Box('魔盒', '14m', '紅色')
      16 b.close()
      17 b.open(b)  # 本來就會自動傳一個self,現(xiàn)在傳入b,就會讓open多得到一個實例對象本身,print看看是什么。
      18 print(b.__dict__)  # 這里返回的就是self本身,self存儲屬性,沒有動作。
      復制代碼

      以上代碼當中:

       

      self 就是 對象/實例 屬性的集合,

      他們之間的關系如下:

      1、Box是個類 ——》實例化——》b 對象/實例

       

      2、Box類python中顯示為:<class '__main__.Box'>  (接下一行)

      ——》實例化:b=Box('魔盒', '14m', '紅色')  (接下一行)

      ——》得到對象/實例b,顯示為<__main__.Box object at 0x00000233857AA518> 

       

      3、抽象體  (接下一行)

      ——》實例的過程  (接下一行)

      ——》得對對象,含有屬性:{'boxname': '魔盒', 'size': '14m', 'color': '紅色'},即self。

       

      self看似是一整個對象,實際上描述明白一個類就是生產(chǎn)對象的過程,描述了self就是得到了對象。所以self內的健值可以直接使用。

      正如自然界中,一個有效的對象,必須包括:1、描述對象的屬性;2、對象的方法。

      所以self是必須的,也是對象中重要的特性。

       

      當掌握了這個原理以后,我們試試以下的代碼,感覺更加神奇。讓我們明白重要的是它的思路:

      class02.py

      復制代碼
      class Box:
          def myInit(mySelf, boxname, size, color):
              mySelf.boxname = boxname
              mySelf.size = size
              mySelf.color = color  # 自己寫一個初始化函數(shù),一樣奏效,甚至不用self命名。其它函數(shù)當中用標準self
              return mySelf  # 返回給實例化過程一個對象!神奇!并且含有對象屬性/字典
      
          # def __init__(self, boxname, size, color):
          #     self.boxname = boxname
          #     self.size = size
          #     self.color = color  #注釋掉原來標準的初始化
      
          def open(self, myself):
              print(self)
              print('-->用自己的myself,打開那個%s,%s的%s' % (myself.color, myself.size, myself.boxname))
              print('-->用類自己的self,打開那個%s,%s的%s' % (myself.color, myself.size, myself.boxname))
      
          def close(self):
              print('-->關閉%s,謝謝' % self.boxname)
      
      
      # 經(jīng)過改造,運行結果和標準初始化沒區(qū)別
      
      b = Box().myInit('魔盒', '14m', '紅色')
      # b = Box('魔盒', '14m', '紅色')#注釋掉原來標準的初始化方法
      b.close()
      b.open(b)  # 本來就會自動傳一個self,現(xiàn)在傳入b,就會讓open多得到一個實例對象本身,print看看是什么。
      print(b.__dict__)  # 這里返回的就是self本身,self存儲屬性,沒有動作。
      復制代碼

       

      換個角度來講,

      對類的操作有:1、定義屬性  2、調節(jié)方法的選項

        ——》在適當?shù)脑O置以后《———

      類對的反饋有:1、得到屬性  2、執(zhí)行方法

       

      在類的函數(shù)當中,self為什么是必要參數(shù),因為他是對象的載體,可以理解成一個字典。

      通過以下代碼演示:

      復制代碼
       1 class Box:
       2     def myInit(mySelf, boxname, size, color):
       3         print(mySelf.__dict__)#顯示為{}空字典
       4         mySelf.boxname = boxname
       5         mySelf.__dict__['aa'] = 'w'#甚至可以像字典一樣操作
       6         mySelf.size = size
       7         mySelf.color = color  # 自己寫一個初始化函數(shù),一樣奏效,甚至不用self命名。其它函數(shù)當中用標準self
       8         return mySelf  # 返回給實例化過程一個對象!神奇!并且含有對象屬性/字典
       9 
      10     # def __init__(self, boxname, size, color):
      11     #     self.boxname = boxname
      12     #     self.size = size
      13     #     self.color = color  #注釋掉原來標準的初始化
      14 
      15     def open(self, myself):
      16         print(self)
      17         print('-->用自己的myself,打開那個%s,%s的%s' % (myself.color, myself.size, myself.boxname))
      18         print('-->用類自己的self,打開那個%s,%s的%s' % (myself.color, myself.size, myself.boxname))
      19 
      20     def close(self):
      21         print('-->關閉%s,謝謝' % self.boxname)
      22 
      23 
      24 # 經(jīng)過改造,運行結果和標準初始化沒區(qū)別
      25 
      26 b = Box().myInit('魔盒', '14m', '紅色')
      27 # b = Box('魔盒', '14m', '紅色')#注釋掉原來標準的初始化方法
      28 b.close()
      29 b.open(b)  # 本來就會自動傳一個self,現(xiàn)在傳入b,就會讓open多得到一個實例對象本身,print看看是什么。
      30 print(b.__dict__)  # 這里返回的就是self本身,self存儲屬性,沒有動作。
      復制代碼

      執(zhí)行結果

       

      復制代碼
      {}
      -->關閉魔盒,謝謝
      <__main__.Box object at 0x0000026A2CBAA5F8>
      -->用自己的myself,打開那個紅色,14m的魔盒
      -->用類自己的self,打開那個紅色,14m的魔盒
      {'boxname': '魔盒', 'aa': 'w', 'size': '14m', 'color': '紅色'}
      復制代碼

       

      注意看:'aa':'w' ,成功設置完成

       

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多