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

首頁 > 編程 > Python > 正文

淺談Python由__dict__和dir()引發的一些思考

2020-01-04 16:25:26
字體:
來源:轉載
供稿:網友

關于__dict__和dir()的區別和作用請參考這篇文章:

基于Python __dict__與dir()的區別詳解

說下我當時遇到的問題:

class Demo:  def __init__(self, name, age):    self.name = name    self.age = age  def func(self):    print('Hello {0}'.format(self.name))>>> d1 = Demo('Pythoner', 24)>>> hasattr(d1, 'func')True>>> d1.__dict__{'age': 24, 'name': 'Pythoner'}>>dir(d1)[ 'age', 'func', 'name','__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

首先,我們知道實例方法也可以算作是屬性,通過hasattr()函數可以驗證.而 __dict__是用來存儲對象屬性的一個字典,但是它的返回值中并沒有'func'!

再看dir()函數,它會自動尋找一個對象的所有屬性(包括從父類中繼承的屬性),它的返回值中有'func'.

所以我推測,"實例方法"并不屬于實例的"私有"屬性,而是該類的所有實例所共享的屬性!

實例得到私有屬性需要一個"私有化"的過程,就像__init__初始化函數!

驗證:

class Demo2:  def __init__(self, name):    self.name = name  def func(self):    print('----get arg country----')    self.country = 'China'>>> d2 = Demo2('Pythoner')>>> d2.__dict__{'name': 'Pythoner'}>>> d2.func()----get arg country---->>> d2.__dict__{'country': 'China', 'name': 'Pythoner'}

"實例方法"之所以被稱為實例方法,或者說每個實例執行實例方法會因為各自私有屬性的不同而產生不同的結果,是因為方法中的self參數.

實例在執行實例方法時會在其所屬的類中尋找該方法,然后通過self參數將實例本身傳遞進去,實例的私有屬性就一并進行了傳遞.通過self參數就實現了實例和方法的綁定.

總結

以上就是本文關于淺談Python由__dict__和dir()引發的一些思考的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 娄底市| 长沙县| 香港 | 呼伦贝尔市| 保亭| 澜沧| 兴义市| 石泉县| 宜兰县| 琼结县| 托克逊县| 宁德市| 交城县| 南开区| 屯门区| 琼海市| 鄄城县| 永登县| 永仁县| 凤城市| 贵阳市| 漳浦县| 贵港市| 平谷区| 安远县| 合江县| 晋宁县| 南投县| 思茅市| 普格县| 迁西县| 泊头市| 通化县| 上饶市| 无棣县| 磐安县| 嘉禾县| 石家庄市| 中牟县| 南木林县| 资源县|