国产探花免费观看_亚洲丰满少妇自慰呻吟_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僅僅是一個實例,沒有任何的屬性和方法,同時也說明了實例可以像類一樣當做一個特殊名稱空間進行數據存放。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 札达县| 大丰市| 五大连池市| 龙游县| 黄冈市| 泰宁县| 鸡西市| 章丘市| 昆山市| 旺苍县| 阳西县| 呼和浩特市| 本溪| 休宁县| 高平市| 漠河县| 凉山| 德江县| 天等县| 鄢陵县| 额尔古纳市| 荃湾区| 新乡县| 刚察县| 辽阳市| 天台县| 陈巴尔虎旗| 柘城县| 长顺县| 墨竹工卡县| 东港市| 江津市| 栾川县| 寿光市| 无极县| 康定县| 扶风县| 杭锦旗| 法库县| 连平县| 诏安县|