python - python中类构造函数的职责是什么?

标签 python constructor typechecking ooad duck-typing

我目前正在研究一些经典的面向对象,并且在某本书(现在不记得是哪本书了)中读到

"The role of a constructor is to assure that new class instances are returned (by the constructor) in a valid state"

由于 python 使用鸭子类型(duck typing),我想知道,例如,我如何才能防止我的对象在没有显式类型检查的情况下接收错误或无效的参数,以及这是否会在程序内部留下进一步采用无效实例的风险,可能导致错误的时间晚于所需的时间。

最佳答案

我想关于返回处于有效状态的对象的说法大体上是正确的。

基本上,构造函数应该根据传入的参数按照您希望的方式设置类的成员,类似于其他语言。

通过 isinstance 在 Python 中进行类型检查是可能的,尽管很多时候确实不需要也​​不希望这样做。

实际上,对于duck typing,一般的过程是编写代码,包括构造函数,就好像对象是一只鸭子类型(duck typing)一样。也就是说,它具有您期望的方法和行为。例如,如果传入的对象没有特定方法,则会引发运行时异常。

此外,请记住 __enter__exit__ 函数,它们与 with 范例一起使用。这有助于清理资源,并且是对其他必要的 try/except/finally block 的响应。

关于python - python中类构造函数的职责是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23748829/

相关文章:

c++ - 与构造函数、类和单独的文件混淆

c++ - 检查 cin 输入,清除输入缓冲区

python - CatBoost:我们是否过度拟合?

c# - 实例化:将列表移动到参数中

java - 使用反射获取构造函数(或方法)参数注释

Swift 无法在循环中推断条件类型

java - 保持类独立性或避免类型检查

python - 意外的结果——具有常量函数的 numpy fromfunction

python - 如何在 Python 3(跨平台)中打印到操作系统的默认打印机?

python - 从数组生成 Django 表单