国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

錯誤2:關于實例屬性和類屬性之間的關系

2019-11-08 02:47:28
字體:
來源:轉載
供稿:網友

先看問題代碼:

代碼一:

class AddrBookEntry(object):    foo = 3    def __init__(self, nm, ph):        self.name = nm        self.phone = ph    def updatePhone(self, newph) :        self.phone = newph        代碼二:

class AddrBookEntry(object):    foo = 3    def __init__(self, nm, ph):        self.name = nm        self.phone = ph    def updatePhone(self, newph) :        self.phone = newph        print 'UpDate phone# for:', self.namea = AddrBookEntry('Tony',136)print a.fooprint AddrBookEntry.fooAddrBookEntry.foo += 2print  a.fooprint AddrBookEntry.foo

代碼一運行結果為:3,3,4,5

代碼二結果為:3,3,5,5

代碼二中實例a的foo數據隨類的變化而變化,而代碼一中,我們先修改了實例a的foo屬性,再修改類屬性,結果a和類之間的數據不互相干擾了。

我們在代碼二輸出下a的屬性字典,即a.__dict__(),可以發現其返回值為{'phone': 136, 'name': 'Tony'},并沒有foo這個屬性,

而AddBookEntry.__dict__返回值為

{'__module__': '__main__', '__del__': <function __del__ at 0x03439870>, 'updatePhone': <function updatePhone at 0x03439930>, '__dict__': <attribute '__dict__' of 'AddrBookEntry' objects>, 'foo': 3, '__weakref__': <attribute '__weakref__' of 'AddrBookEntry' objects>, '__doc__': None, '__init__': <function __init__ at 0x034398F0>}

總結:可以這么認為,調用或訪問實例的屬性,首先解釋器會從實例的__dict__字典去查找,若沒有找到相應的屬性,則去實例化它的類的__dict__字典中查找該屬性,若依舊沒有,則raise AttributeError錯誤

擴展:大家也可以發現實例a的__dict__中并沒有方法等東西,如果我們沒有在__init__中預先給它添加了屬性,那實例a僅僅是一個實例,沒有任何的屬性和方法,同時也說明了實例可以像類一樣當做一個特殊名稱空間進行數據存放。

剩下的不多說,自己體會可能會更好


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 山丹县| 贡嘎县| 都兰县| 禹州市| 建昌县| 财经| 泰宁县| 福泉市| 互助| 格尔木市| 招远市| 抚远县| 塔城市| 延安市| 长乐市| 依兰县| 昂仁县| 滁州市| 麻栗坡县| 砀山县| 乐业县| 连江县| 博罗县| 林芝县| 台安县| 保定市| 农安县| 夹江县| 泸州市| 岳阳县| 宁南县| 龙陵县| 怀集县| 罗山县| 宁河县| 连云港市| 于田县| 长兴县| 政和县| 巴林左旗| 天津市|