2012-02-03 91 views

回答

2

这是一个非常宽泛的问题。由于你没有提供的示例代码,我将只显示最简单的例子:

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) 
+0

'a'从哪里来?方法'meth'在哪里? – 2012-02-03 09:18:24

+1

@Tichodroma对不起,我的错。在写作时应该思考;-)现在纠正。 – glglgl 2012-02-03 09:31:05

+0

如果这些类在单独的模块中,该怎么办? 即 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

9

一个子背后的一点是,它延伸变造超类的行为。超类无法知道如何子类将其扩展。

编辑:,但它是可能的超知道,子类将扩展它。不知道,如果这是好设计,但。

0

这里就是我刚刚试过:

class A(object): 
    def x(self): 
     print self.y() 

class B(A): 
    def y(self): 
     return 1 

>>> B().x() 
1 

所以,除非你有一些具体的问题,只需要调用从基类的子类的方法,它应该只是工作。

+1

我想知道为什么有人想要这样做。我为什么要写一个'A'的方式,事先已经预先知道'B'如何扩展它? – 2012-02-03 09:19:38

+1

@Tichodroma:是的,这里有一些代码味道。但也许它是OP的讲师与现实不同步)? – 2012-02-03 09:23:10

+4

@Tichodroma也许你不知道它?让'A'成为一个可以用3或4种方式扩展的基类。它不知道这些是如何实现的,只知道它们提供了哪些签名。我经常见过这样的事情,例如在'MySQLdb'中。 – glglgl 2012-02-03 09:35:03

0

我认为这与使用抽象方法有关。父类定义子类应该实现的方法,父类知道这些方法将被实现。类似的结构存在于例如Java中。

在Python利用这些讨论以及在这里:Abstract methods in Python

7

我相信这是经常使用的模式。

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 

它有点像抽象类,但提供了默认行为。尽管如此,我无法记住头顶的图案名称。

+0

使用C++术语,它只是多态。但是对于一切都适用的Python而言...... – matsjoyce 2014-11-21 17:54:54