Re: [問題] python 自己跑出來的class method的問題
※ 引述《fuminfumin (fumin)》之銘言:
: 我目前在學習web.py,主要的問題是看到裡面的一段程式碼好像black magic
: 有問題的程式碼在下面
: https://github.com/webpy/webpy/blob/master/web/session.py
: 在第107行的地方,class Session 的 _load() method 裡面
: 出現了 self.update(d) 這個程式碼。
: 我的疑問是 class Session 從來都沒有定義過 update() 這個 method,
: 為什麼可以呼叫這個沒有被定義的 method。
: 我原本是猜想可能是前面一段 "class Session(object)" 繼承了 object 這個 class 了
: 但是我 google 都沒有找到 object 這個 class 有 update() 這個 method。
: 因此想請教一下這個 self.update() 到底是怎麼來的,謝謝。
先直接回答問題:來自於第 60 行附近的幾個函數
self.__getitem__ = self._data.__getitem__
self.__setitem__ = self._data.__setitem__
self.__delitem__ = self._data.__delitem__
update(self, dict2) 是 dict 的 method, 其運作是經由一些內部的保留函數達成
只要定義這些保留函數, 就可以把一個 Python object 變得 iterable
而可以使用一些 iterable object 才能使用的語法, update 是其中之一
在這個例子裡, self._data_ 是一個 dict 物件
這三行把 self._data_ 的三個 method 直接映射到 self
所以 self.update(value) 就等同於 self._data_.update(value)
--
╱ ̄ ̄ ̄╲
▏◢█◣ ▏
︻█︻█ ▏ 成龍表示: 是喔...
′/ ‵ ▏
╰╯ █╱
ψQSWEET ◥︶█◤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
→
04/08 13:53, , 1F
04/08 13:53, 1F
推
04/08 19:51, , 2F
04/08 19:51, 2F
→
04/08 19:52, , 3F
04/08 19:52, 3F
→
04/08 19:54, , 4F
04/08 19:54, 4F
→
04/08 19:55, , 5F
04/08 19:55, 5F
→
04/08 19:56, , 6F
04/08 19:56, 6F
→
04/08 19:58, , 7F
04/08 19:58, 7F
→
04/08 20:02, , 8F
04/08 20:02, 8F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章