您好,登錄后才能下訂單哦!
了解python3類對象要不要在init中初始化?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
先看這段代碼:
class Cycle(object): def __init__(self,r): self.pi=3.1415926 self.r=r a=Cycle(10) b=Cycle(7)
首先,經常看到這樣一個情況,為什么,我們通常定義的方法,為什么第一個參數需要是 self ,其實很簡單,用來和具體實例綁定的。這一段代碼,將 Cycle 實例化了兩次,最后你輸出 a.r 和 b.r 彼此的值是不一樣的。那么實例變量的定義就很清晰了。
那么什么是類變量呢?
上面用 Cycle 這個類來描述一個圓。里面存在著一個變量 pi ,不同的圓,其 pi 值固定,那么我們可以將其抽象出來,諸多圓實例共享一個變量 pi
class Cycle(object): pi=3.1415926 def __init__(self,r): self.r=r a=Cycle(10) b=Cycle(7)
那么為什么實例可以訪問類變量呢?
很簡單,在我們調用具體變量的時候,遵循如下的查找規則
1. 優先從實例中查找變量,如果沒查找到執行 2
2. 從類中查找變量,如果沒查找到執行 3
3. 按照繼承鏈繼續查找,直到找到或者到頂端沒找到拋出異常為止
首先代碼是這樣的
class test: a=[1]*30 x=test() x.a[1]=100 y=test() print(y.a[1])
我們來詳細分析下首先聲明了一個類變量a,值為list里面包含了30個元素然后實例化了一個實例 x接著執行 x.a[1]=100這一步發生了很多隱式的操作,我們慢慢講首先,根據我們前面說的變量查找規則,在實例中沒有查找到 a 這個變量后,然后向上到類里查找,誒!查找到了 a 這個 list ,緊接著,調用 list 中的方法 __setitem__ 來設置 list 中的第 2 個元素的值為 100 。誒?發現沒有,我們這里,還是對類變量中的值進行修改了。好了重新復習下我們類變量的概念和類進行綁定的變量,該類的實例之間可以共享變量恩,在前面對類變量值進行修改了。然后類變量是被實例共享的,所以第二次實例化操作得到的實例 y 后,y.a[1] 得到的是不是我們修改后的值?
好了,再看下一段代碼
class test: a=None def __init__(self): self.a=[1]*30 x=test() x.a[1]=100 y=test() print(y.a[1])
在 __init__ 方法中,是不是聲明了一個實例變量a,復習下我們實例變量的概念和實例綁定的變量,即實例變量,實例之間各自數據隔離,互不通用。和實例綁定的變量,實例之間彼此數據隔離,互不通用。那么兩個實例 x,y 不管怎么修改,是不是只修改了和實例綁定的變量值,并不會影響其余實例的表現。
感謝各位的閱讀!看完上述內容,你們對python3類對象要不要在init中初始化大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。