1. 程式人生 > >在python的class中的,self到底是什麽?

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

clas strong sel dict size 是個 pos nbsp 是什麽

在python2中分為

經典類:

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,現在傳入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看似是一整個對象,實際上描述明白一個類就是生產對象的過程,描述了self就是得到了對象。所以self內的健值可以直接使用。

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

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

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

class02.py

class Box:
    def myInit(mySelf, boxname, size, color):
        mySelf.boxname = boxname
        mySelf.size = size
        mySelf.color = color  # 自己寫一個初始化函數,一樣奏效,甚至不用self命名。其它函數當中用標準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)


# 經過改造,運行結果和標準初始化沒區別

b = Box().myInit(魔盒, 14m, 紅色)
# b = Box(‘魔盒‘, ‘14m‘, ‘紅色‘)#註釋掉原來標準的初始化方法
b.close()
b.open(b)  # 本來就會自動傳一個self,現在傳入b,就會讓open多得到一個實例對象本身,print看看是什麽。
print(b.__dict__)  # 這裏返回的就是self本身,self存儲屬性,沒有動作。

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