我想知道如何调用超类中的子类方法。如何在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