class A(object):
def a(self, b=1):
print 'Up'
d = {1 : a}
def b(self):
print self.d[1]
print self.b
print self.d[1].__get__(self, A)()
# print self.d[1]()
class B(object):
def a(self):
print 'here??'
return 10000
d = {1 : a}
def b(self):
print 'hurray'
o = A()
o.b()
b = B()
type(o).__dict__['b'].__get__(b, type(b))()
嗨夥計,綁定的方法到另一個類
我正在經歷Python: Bind an Unbound Method?和http://users.rcn.com/python/download/Descriptor.htm,並試圖嘗試對我的學習。
不過,我現在已經擊出了一些新的疑惑: -
- 在我的代碼的最後一行,我能夠使用
__get__
與b
對象和實例:type(b)
。這隻適用於在class B
中定義方法b
。爲什麼這樣? - 即使最後一行要求我在
class B
提供一種方法b
,還在class A
b
被調用的方法。爲什麼這樣? - 我非常驚訝,在上述步驟後,我注意到
class A
的方法a
未被方法b
的代碼調用class A
;相反,它調用class B
的方法a
。爲什麼這樣?
看到這種行爲後我很困惑。我可能還需要了解更多描述符。但是,這將是一個很大的幫助,如果你能回答我的疑惑
謝謝凱文。但是,你能否解釋一下我們可以使用type(o).__ dict __ ['b'] .__ get __(b,type(b))()'而不是'ob__get __( b,類型(b))()'? 換句話說,將A類的方法'b'綁定到''B類'是可能的嗎?如果是,那麼它的實際用例如何以及是什麼? – GodMan
「是否有可能將A類的方法b綁定到B類?」這正是你在你的代碼中所做的。讓'self'假裝它是A的一個實例完全是另一回事。無論如何,我不認爲這有任何實際用途。良好的OO代碼不應試圖「欺騙」環境,使其認爲某個對象屬於它實際上不屬於的類。 – Kevin
感謝您回答我所有的疑問。 – GodMan