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

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

為什么 __dict__ 不包含類成員,除非使用直接初始化?

為什么 __dict__ 不包含類成員,除非使用直接初始化?

慕沐林林 2023-10-06 16:46:44
我需要訪問類方法中的類成員列表,特別是在__init__()函數(shù)中,以便集體初始化它們。我嘗試使用__dict__andvars(self)但不幸的是它們返回空dict對(duì)象,除非使用直接初始化,例如self.y=5. 問題是:為什么它是空的,我如何立即初始化它們,或者本質(zhì)上變量__dict__適合批量初始化?謝謝示例代碼是這樣的:class P:    def __init__(self):        print("inside __init__() :",self.y,self.__dict__)    x=8    y=9p=P()print(" y is: ", p.y)print("and __dict__ is:",p.__dict__)輸出:inside __init__() : 9 {} y is:  9and __dict__ is: {}Python版本:3.8.5測試的操作系統(tǒng):windows 10、MacOS 10.15.7 和 Linux CentOS 7
查看完整描述

2 回答

?
幕布斯7119047

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

Python 類實(shí)例是動(dòng)態(tài)的 - 在您將它們放在那里之前它們沒有變量(請(qǐng)參見下面的注釋)。他們對(duì)這些變量應(yīng)該是什么沒有任何預(yù)先了解。通常這是通過將它們一一添加(例如,self.foo = 1)__init__或類中的其他方法來完成的。但如果您有不同的變量源,則可以通過添加到 來實(shí)現(xiàn)self.__dict__。假設(shè)我有 CSV 文件中的一行,并且我想要一個(gè)由該行初始化的類。我可以


class P:

    cell_names = ('a', 'b', 'c')


    def __init__(self, row):

        print("before", self.__dict__)

        self.__dict__.update(zip(self.cell_names, row))

        print("after", self.__dict__)


p = P((1,2,3))

print("attributes", p.a, p.b, p.c)

輸出


before {}

after {'a': 1, 'b': 2, 'c': 3}

attributes 1 2 3

當(dāng)然,還有其他初始化方法。這取決于您的“整體”數(shù)據(jù)的來源是什么。


如果您想添加所有關(guān)鍵字參數(shù),您可以


class P1:

    def __init__(self, **kw):

        self.__dict__.update(kw)


p = P1(a=1, b=3, c=3)

print("P2", p.a, p.b, p.c)

(注意:您可以使用__slot__在類中預(yù)定義變量。這些變量繞過實(shí)例字典)


查看完整回答
反對(duì) 回復(fù) 2023-10-06
?
料青山看我應(yīng)如是

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

_dict__只保存實(shí)例屬性。在你的例子中是x屬性。是一個(gè)可以表示許多不同事物的表達(dá)方式;實(shí)際結(jié)果取決于哪個(gè)查找首先成功。yself.x

當(dāng)您進(jìn)行類似 的分配時(shí)self.x = 5,該值將與中的5鍵相關(guān)聯(lián)。xself.__dict__

當(dāng)您嘗試獲取 的值時(shí)self.x首先嘗試的是self.__dict__['x']。但如果失敗了,它會(huì)嘗試P.x。如果失敗,它將檢查MRO 中x每個(gè)祖先的屬性,直到找到值。P如果沒有找到任何內(nèi)容,AttributeError則會(huì)引發(fā) an。__getattr__(這忽略了or的使用__getattribute__,但足以解釋如何在為空self.x時(shí)提供值。)self.__dict__


查看完整回答
反對(duì) 回復(fù) 2023-10-06
  • 2 回答
  • 0 關(guān)注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報(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)