从构造函数调用成员函数

新手上路,请多包涵

我知道这个问题的标题与此类似: C++:在构造函数中调用成员函数? 但我问的是一个更普遍的问题。

从构造函数中调用成员函数是一种好习惯吗?它使阅读代码更容易,我更喜欢封装类型的方式(即每个代码块都有一个目标)。

一个说明性的例子,在 python 中:

 class TestClass:
    def __init__(self):
        self.validate()

    def validate(self):
        # this validates some data stored in the class

这比在构造函数中编写 validate 代码更好吗?这种方法有缺点吗?例如,函数开销是否更昂贵?

我个人更喜欢它的可读性,但这只是我的偏好。

干杯

原文由 Simon Walker 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

我认为从构造函数调用成员函数没有任何本质上的错误, 前提是它们不是虚函数

从构造函数调用虚成员函数的问题是子类可以覆盖该函数。这将导致构造函数在调用对象的子类部分的构造函数之前调用子类中的重写实现。

在 Java 中,任何一个 privatestaticfinal 访问修饰符都会通过防止对超类方法的虚拟调用来使从构造函数调用该方法安全。我认为这些技术在 Python 中不可用。

原文由 richj 发布,翻译遵循 CC BY-SA 2.5 许可协议

我对 C++ 比对 Python 更熟悉,但我认为从构造函数调用成员函数没有问题,尤其是当这种做法能够从多个构造函数中分解出类似的代码时。在我的书中,任何减少冗余的东西都是好的。

原文由 Reinderien 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题