Re: [問題] zope interface
我英文不是很好 弄錯文章的意思麻煩指正一下
以我的了解:
directly provide implement
IFooFactory <------------------ Foo ----------------> IFoo
∣ ↑
∣ make instance ∣ provide
↓ ∣
foo --------------------
※ 引述《huggie (huggie)》之銘言:
: ※ 引述《KSJ (阿真)》之銘言:
: : __call__ 就python裡只是讓instance有類似函式呼叫的寫法
: : 例如:
: : class a:
: : def __call__( self, word ):
: : print word
: : b = a()
: : b("hi") #會print hi
: : 文中的__call__看起來只是要註解 __init__ 而使用的招式而已
: 就是這句不懂。註解中的"Create a foo"是說IFactory() 直接會create
: 一個 foo 還是implement IFactory 的某個class() 會 create 一個 foo?
看起來是後者 IFooFactory前面是"I" 應該是interface 僅提供註解
不該拿來create東西
那個 __call__ 是用來註解Foo的 __init__方法
因為通常不會寫成 Foo.__init__()
我們比較常寫成 Foo() (使用了__call__)
就好比 IFoo有一個 bar 方法 是用來註解 bar 方法一樣
他跟IFoo是同類的東西 但是拿來註解class 而不是class下的instance
所以稱做 directly provide
因為很常使用... (如下我的文)
↓
: : 而IFooFactory
: : 是要讓class(也是一種object)直接 提供(provide) Interface
: : 因為跟他之前介紹的 instance 提供 Interface有點不同 所以換個名字吧?
: : 文後也說 因為這招很常被使用到 所以有
: : zope.interface.classProvides(IFooFactory)
: : 直接讓 Foo2 提供 Interface 的寫法
: 你的意思是 IFooFactory 定義了provide者必須有 invocation 即會製造出
: 一個 foo 的功能, 而 class Foo2 因為 invocation 時會製造出
: foo 的功能因此也是 provide IFooFactory?
調用(invocation)是指 "()"嗎?
嗯~簡單說就是註解class(而不是instance)這樣 我想你應該說得沒錯
foo 的功能因此"就"是 provide IFooFactory (稱 directly provide)
: : 這個你可能要看看文章蠻前面有解說 implememt 與 provide 的意思
: 前面那邊很單純我懂..
: 就是這個例子不懂。
: : 你說的第一句是 我上面最後提的寫法
: : implements(XXX) 是指說
: : 若把implements寫在class裡 那class的instance就會provide XXX
: 這邊懂。
: : 跟class directProvide interface 意思差蠻多的
: 這邊不懂.
註解class本身(directly provide) 而不是註解class下的instance(implement)
這是我看文章的了解 不過還不知道這是做什麼用的(orz...
也不一定對
希望你了解以後可以分享心得給大家
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.176.140.46
推
03/06 12:30, , 1F
03/06 12:30, 1F
討論串 (同標題文章)
完整討論串 (本文為第 4 之 4 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章