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

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

python 實(shí)例化以后屬性更新問(wèn)題

python 實(shí)例化以后屬性更新問(wèn)題

函數(shù)式編程 2019-05-12 08:57:43
本人剛剛接觸Python,目前使用python3.6,遇到了一點(diǎn)關(guān)于類(lèi)屬性的問(wèn)題,代碼如下:classA():def__init__(self):self.x=0self.y=0self.z=[self.x,self.y]defadd_one(self):self.x+=1#self.z=[self.x,self.y]a=A()a.add_one()print(a.x)#1print(a.z)#[0,0]問(wèn)題如下:假設(shè)在add_one方法里面沒(méi)有self.z=[self.x,self.y]這段代碼,可以發(fā)現(xiàn)雖然x是更新了,但是z并沒(méi)有隨著x的更新而更新,除非手動(dòng)加上這段代碼才可以實(shí)現(xiàn)更新,請(qǐng)問(wèn)這是為什么?另外請(qǐng)教一下有沒(méi)有其他可以更加簡(jiǎn)便的方法進(jìn)行對(duì)屬性的更新?因?yàn)槟壳斑@種代碼更新起來(lái)很麻煩,增加一個(gè)更新方法就需要將所有被更新的屬性手動(dòng)更新一次愿有前輩能指點(diǎn)一下,若有表述不當(dāng),請(qǐng)見(jiàn)諒!
查看完整描述

2 回答

?
不負(fù)相思意

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

用@property將函數(shù)包裝為屬性
python3
>>>classA():
def__init__(self):
self.x=0
self.y=0
@property#將函數(shù)包裝為屬性
defz(self):
return[self.x,self.y]
defadd_one(self):
self.x+=1
>>>a=A()
>>>a.add_one()
>>>a.x
1
>>>a.z
[1,0]
>>>
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-12
?
有只小跳蛙

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

因?yàn)槟阒苯有薷牧藄elf.x的整個(gè)引用。self.x+=1的操作是將self.x的指向從原先指向的值改為指向另一個(gè)值,而不是將其所指向的值修改為另一個(gè)值,而self.z仍然存儲(chǔ)著原先self.x指向的舊的值,當(dāng)然不會(huì)跟著更新。要達(dá)到你想要的類(lèi)似的效果,可以試試
a=[]
b=[]
c=[a,b]
print(c)
a.append(1)
b.append(2)
print(c)
與實(shí)例化與否無(wú)關(guān)。
上述代碼對(duì)a和b指向的值本身進(jìn)行了修改,而非修改整個(gè)引用使其指向新的值。也就是說(shuō),修改后的a和b的指向并沒(méi)有改變(而self.x+=1修改了self.x的指向),因此c的兩個(gè)元素仍能通過(guò)其引用找到與當(dāng)前a和b一致的值
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-12
  • 2 回答
  • 0 關(guān)注
  • 617 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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