我目前正在研究一些经典的面向对象,并且在某本书(现在不记得是哪本书了)中读到
"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/