我想知道如何調用超類中的子類方法。如何在Python中的超類中調用子類方法
回答
這是一個非常寬泛的問題。由於你沒有提供的示例代碼,我將只顯示最簡單的例子:
class A(object):
def meth1(self, a):
self.meth2(a, a*a)
class B(A):
def meth2(self, a, b):
return b/a
b = B()
b.meth1(10)
'a'從哪裏來?方法'meth'在哪裏? – 2012-02-03 09:18:24
@Tichodroma對不起,我的錯。在寫作時應該思考;-)現在糾正。 – glglgl 2012-02-03 09:31:05
如果這些類在單獨的模塊中,該怎麼辦? 即 file2.py 進口file1的 類測試用例(file1.TestBase): DEF執行(個體): self.pass() file1.py 類TestBase: DEF傳遞(自): print「PASS」 testBase = TestBase() testBase.execute() – ThePracticalOne 2012-10-19 18:03:33
一個子背後的一點是,它延伸和變造超類的行爲。超類無法知道如何子類將其擴展。
編輯:,但它是可能的超知道,是子類將擴展它。不知道,如果這是好設計,但。
這裏就是我剛剛試過:
class A(object):
def x(self):
print self.y()
class B(A):
def y(self):
return 1
>>> B().x()
1
所以,除非你有一些具體的問題,只需要調用從基類的子類的方法,它應該只是工作。
我想知道爲什麼有人想要這樣做。我爲什麼要寫一個'A'的方式,事先已經預先知道'B'如何擴展它? – 2012-02-03 09:19:38
@Tichodroma:是的,這裏有一些代碼味道。但也許它是OP的講師與現實不同步)? – 2012-02-03 09:23:10
@Tichodroma也許你不知道它?讓'A'成爲一個可以用3或4種方式擴展的基類。它不知道這些是如何實現的,只知道它們提供了哪些簽名。我經常見過這樣的事情,例如在'MySQLdb'中。 – glglgl 2012-02-03 09:35:03
我認爲這與使用抽象方法有關。父類定義子類應該實現的方法,父類知道這些方法將被實現。類似的結構存在於例如Java中。
在Python利用這些討論以及在這裏:Abstract methods in Python
我相信這是經常使用的模式。
class A(object):
def x(self):
self.y()
def y(self):
print('default behavior')
class B(A):
def y(self):
print('Child B behavior')
class C(A):
def z(self):
pass
>>>B().x()
Child B behavior
>>>C().x()
default behavior
它有點像抽象類,但提供了默認行爲。儘管如此,我無法記住頭頂的圖案名稱。
使用C++術語,它只是多態。但是對於一切都適用的Python而言...... – matsjoyce 2014-11-21 17:54:54
- 1. 在Python中調用超類的類方法
- 2. 如何從Cocoa中的子類委託方法調用超類委託方法?
- 3. Java的繼承:在超類中調用子類方法
- 4. 從超類調用子類方法
- 5. Actionscript:從子類調用超類方法
- 6. Ember.js如何從子類調用超類或基類方法?
- 7. 如何在包含子類的超類列表上調用子類方法
- 8. 調用超類方法後調用子類方法
- 9. 如何在Clojure gen-class方法中調用超類的方法?
- 10. 問題在子類構造函數中調用超類方法
- 11. Java繼承:在超類中調用子類方法
- 12. 訪問其超類的子類中的調用方法
- 13. Python的超類調用子類
- 14. 來自重載子類方法的調用超類方法
- 15. 如何防止超類調用overriden子類方法?
- 16. 如何調用超類的overriden方法?
- 17. 在Love2D中超類調用超類方法
- 18. 從抽象超類調用重寫的子類的類方法
- 19. 調用超類的方法
- 20. Python - 調用方法在子類
- 21. 從子類工廠方法PHP調用超類工廠方法
- 22. 調用子類的方法,在Java中
- 23. 如何在Python 3中重用超類方法的變量?
- 24. 子類如何使用子類的相同方法名稱調用超類的方法?
- 25. 超類/子類方法
- 26. 如何處理超類UIViewController子類中的方法
- 27. Python(unittest)超類方法應該如何在其調用子類中引用一個變量?
- 28. 在Python中對類方法調用mapPartition
- 29. 在Python/PySide中調用類方法
- 30. 使用反射從超類中的子類中找到方法
你可以更明確的問你的問題。 – 2012-02-03 17:43:18