久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

 刮骨劍 2019-07-11

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

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

在python2中分為

經(jīng)典類:

class Box:

  pass

新式類:

class Box(object):

  pass

 

在python3中,,只有新式類:

class Box:

  pass

 

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

 

上實例:

class.py

復(fù)制代碼
 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('-->關(guān)閉%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存儲屬性,,沒有動作。
復(fù)制代碼

以上代碼當(dāng)中:

 

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

他們之間的關(guān)系如下:

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內(nèi)的健值可以直接使用。

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

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

 

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

class02.py

復(fù)制代碼
class Box:
    def myInit(mySelf, boxname, size, color):
        mySelf.boxname = boxname
        mySelf.size = size
        mySelf.color = color  # 自己寫一個初始化函數(shù),一樣奏效,甚至不用self命名,。其它函數(shù)當(dāng)中用標(biāo)準(zhǔn)self
        return mySelf  # 返回給實例化過程一個對象,!神奇!并且含有對象屬性/字典

    # def __init__(self, boxname, size, color):
    #     self.boxname = boxname
    #     self.size = size
    #     self.color = color  #注釋掉原來標(biāo)準(zhǔn)的初始化

    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('-->關(guān)閉%s,謝謝' % self.boxname)


# 經(jīng)過改造,,運行結(jié)果和標(biāo)準(zhǔn)初始化沒區(qū)別

b = Box().myInit('魔盒', '14m', '紅色')
# b = Box('魔盒', '14m', '紅色')#注釋掉原來標(biāo)準(zhǔn)的初始化方法
b.close()
b.open(b)  # 本來就會自動傳一個self,,現(xiàn)在傳入b,就會讓open多得到一個實例對象本身,,print看看是什么,。
print(b.__dict__)  # 這里返回的就是self本身,,self存儲屬性,沒有動作,。
復(fù)制代碼

 

換個角度來講,,

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

  ——》在適當(dāng)?shù)脑O(shè)置以后《———

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

 

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

通過以下代碼演示:

復(fù)制代碼
 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ù)當(dāng)中用標(biāo)準(zhǔn)self
 8         return mySelf  # 返回給實例化過程一個對象,!神奇,!并且含有對象屬性/字典
 9 
10     # def __init__(self, boxname, size, color):
11     #     self.boxname = boxname
12     #     self.size = size
13     #     self.color = color  #注釋掉原來標(biāo)準(zhǔn)的初始化
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('-->關(guān)閉%s,,謝謝' % self.boxname)
22 
23 
24 # 經(jīng)過改造,運行結(jié)果和標(biāo)準(zhǔn)初始化沒區(qū)別
25 
26 b = Box().myInit('魔盒', '14m', '紅色')
27 # b = Box('魔盒', '14m', '紅色')#注釋掉原來標(biāo)準(zhǔn)的初始化方法
28 b.close()
29 b.open(b)  # 本來就會自動傳一個self,,現(xiàn)在傳入b,,就會讓open多得到一個實例對象本身,print看看是什么,。
30 print(b.__dict__)  # 這里返回的就是self本身,,self存儲屬性,沒有動作,。
復(fù)制代碼

執(zhí)行結(jié)果

 

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

 

注意看:'aa':'w' ,成功設(shè)置完成

 

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多