为什么子类会覆盖基类方法但是使它相同(而不是使用它)?

时间:2016-01-08 21:41:22

标签: python python-2.7 inheritance python-unittest

在Python中学习继承,到目前为止我的理解是,如果一个子类打算让方法做一些与基类不同的事情,那么子类只会覆盖基类的方法。

HowDoI为例,我们在test_howdoi.py中看到HowdoiTestCase类继承自unittest.TestCase,覆盖TestCase的{​​{1}} } function(只有setUp() es):

pass

好到目前为止。

然后

test_howdoi.py继续覆盖 def setUp(self): self.queries = ['format date bash', 'print stack trace python', 'convert mp4 to animated gif', 'create tar archive'] self.pt_queries = ['abrir arquivo em python', 'enviar email em django', 'hello world em c'] self.bad_queries = ['moe', 'mel'] ,但它只写入tearDown()(根据基类的定义)。并且tearDown()不会在任何地方使用。

  • 为什么基类函数会被覆盖与基类中的行为相同的行为?
  • 如果无意使用它,为什么会被覆盖?

1 个答案:

答案 0 :(得分:1)

您所描述的结构可能会缩减为以下代码:

class A(object):
    def f(self):
        pass

class B(A):
    # this declaration is redundant since exact same behaviour is already inherited.
    def f(self):  
        pass

试图回答你的问题:

  

如果无意使用它,为什么会被覆盖呢?

单位测试跑步者使用

setUptearDown方法(顾名思义 - 测试前后)。

  

为什么基类功能会被相同的行为覆盖   作为它在基类中的行为?

有些原因可能是:

  • IDE生成了TestCase类存根,开发人员只保留了它
  • 开发人员没有阅读文档,其中指出setUptearDown是可选的,默认情况下为空实现
  • 有些开发人员喜欢明确写出当前测试套件
  • 的setUp / tearDown为空

TLDR:意外或个人偏好。