中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python3類對象要不要在init中初始化

發布時間:2020-11-17 09:37:06 來源:億速云 閱讀:207 作者:小新 欄目:編程語言

了解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中初始化大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇雄县| 定襄县| 萝北县| 台北市| 黄浦区| 敦化市| 永城市| 顺平县| 榆社县| 永寿县| 南阳市| 景宁| 巴塘县| 汤原县| 民和| 新沂市| 格尔木市| 宁远县| 宜州市| 巨鹿县| 天水市| 大庆市| 兰考县| 将乐县| 永川市| 南阳市| 吉安市| 彰武县| 阳高县| 隆子县| 恩施市| 荥阳市| 高碑店市| 甘谷县| 舞阳县| 任丘市| 达日县| 湖北省| 汾阳市| 广饶县| 棋牌|