我知道这个问题的标题与此类似: 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 许可协议
我认为从构造函数调用成员函数没有任何本质上的错误, 前提是它们不是虚函数。
从构造函数调用虚成员函数的问题是子类可以覆盖该函数。这将导致构造函数在调用对象的子类部分的构造函数之前调用子类中的重写实现。
在 Java 中,任何一个 private 、 static 或 final 访问修饰符都会通过防止对超类方法的虚拟调用来使从构造函数调用该方法安全。我认为这些技术在 Python 中不可用。