91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

昭觉县| 中山市| 民县| 积石山| 洪洞县| 翼城县| 米泉市| 湟中县| 青岛市| 尚志市| 永寿县| 灌阳县| 乌兰浩特市| 高邑县| 西宁市| 长岭县| 贡嘎县| 平顺县| 浙江省| 龙山县| 曲靖市| 定结县| 志丹县| 阿城市| 阿鲁科尔沁旗| 花莲市| 仙居县| 乐清市| 朝阳县| 吉水县| 宿松县| 托克托县| 临邑县| 常德市| 诸暨市| 隆尧县| 巴青县| 乐平市| 西藏| 始兴县| 宜兰县|