第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

python類實(shí)例變量和類變量

python類實(shí)例變量和類變量

慕碼人8056858 2019-10-21 09:23:20
我在理解類/實(shí)例變量如何在Python中工作時(shí)遇到問題。我不明白為什么當(dāng)我嘗試這段代碼時(shí)列表變量似乎是一個(gè)類變量class testClass():    list = []    def __init__(self):        self.list.append('thing')p = testClass()print p.listf = testClass()print f.list輸出:['thing']['thing', 'thing']當(dāng)我這樣做時(shí),它似乎是一個(gè)實(shí)例變量class testClass():    def __init__(self):        self.list = []        self.list.append('thing')p = testClass()print p.listf = testClass()print f.list輸出:['thing']['thing']
查看完整描述

3 回答

?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊

這是因?yàn)镻ython使用.。解析名稱的方式。在編寫時(shí)self.list,Python運(yùn)行時(shí)首先嘗試list通過在實(shí)例對象中查找名稱來解析名稱,如果找不到,則在類實(shí)例中進(jìn)行查找。


讓我們逐步研究它


self.list.append(1)

list對象中有名稱self嗎?

是的:使用它!完。

否:轉(zhuǎn)到2。

list對象的類實(shí)例中是否有名稱self?

是的:使用它!完

否:錯(cuò)誤!

但是,當(dāng)您綁定名稱時(shí),情況有所不同:


self.list = []

list對象中有名稱self嗎?

是:覆蓋它!

否:綁定!

因此,這始終是一個(gè)實(shí)例變量。


您的第一個(gè)示例list在類實(shí)例中創(chuàng)建一個(gè),因?yàn)檫@是當(dāng)時(shí)的活動(dòng)范圍(沒有self任何地方)。但是您的第二個(gè)示例list在的范圍內(nèi)顯式創(chuàng)建了一個(gè)self。


這個(gè)例子更有趣:


class testClass():

    list = ['foo']

    def __init__(self):

        self.list = []

        self.list.append('thing')


x = testClass()

print x.list

print testClass.list

del x.list

print x.list

那將打?。?/p>


['thing']

['foo']

['foo']

刪除實(shí)例名稱后,可以通過self引用看到類名稱。


查看完整回答
反對 回復(fù) 2019-10-21
?
HUX布斯

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊

Python有關(guān)于查找名稱的有趣規(guī)則。如果您真的想改變主意,請嘗試以下代碼:


class testClass():

    l = []

    def __init__(self):

        self.l = ['fred']

這將給每個(gè)實(shí)例一個(gè)變量l,該變量將屏蔽類變量l。如果這樣做,您仍然可以使用class變量self.__class__.l。


我的想法是……只要您這樣做instance.variable(即使對于方法名,它們只是值恰好是函數(shù)的變量),它都會(huì)在實(shí)例的字典中查找它。如果找不到它,它將嘗試在實(shí)例的“類”字典中查找它。僅當(dāng)變量被“讀取”時(shí)。如果將其分配給它,它將始終在實(shí)例字典中創(chuàng)建一個(gè)新條目。


查看完整回答
反對 回復(fù) 2019-10-21
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

在第一個(gè)示例中,list是類的一個(gè)屬性,由該類的所有實(shí)例共享。這意味著您甚至可以在沒有類型對象的情況下訪問它testClass:


>>> class testClass():

...     list = []

...     def __init__(self):

...             self.list.append("thing")

... 

>>> testClass.list

[]

>>> testClass.list.append(1)

>>> testClass.list

[1]

但是所有對象都list與該類以及彼此共享該屬性:


>>> testObject = testClass()

>>> testObject.list

[1, 'thing']

>>> testClass.list

[1, 'thing']

>>> 

>>> testObject2 = testClass()

>>> testClass.list

[1, 'thing', 'thing']

>>> testObject2.list

[1, 'thing', 'thing']


查看完整回答
反對 回復(fù) 2019-10-21
  • 3 回答
  • 0 關(guān)注
  • 518 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)