【问题标题】:What are the responsibilities of a class constructor in python?python中类构造函数的职责是什么?
【发布时间】:2014-07-08 01:37:16
【问题描述】:

我目前正在学习一些经典的面向对象,并且读过一些书(现在不记得是哪一本了)

“构造函数的作用是确保(由构造函数)以有效状态返回新的类实例”

由于 python 使用鸭子类型,例如,我想知道如何防止我的对象在没有显式类型检查的情况下接收错误或无效的参数,以及是否会在程序中进一步引入无效实例的风险,可能导致错误的时间晚于预期。

【问题讨论】:

  • 我认为这将被关闭,但是我的 2c 是它应该导致正确的初始状态......但是在 python 中,将它分配给一些类变量并引发是完全可以接受的当他们实际尝试使用类变量时出错...
  • @JoranBeasley 您说“完全可以接受”,但我想了解:基于什么可以接受?谢谢
  • 基于大型、公开接受的图书馆的使用年龄......你真的已经找到了为什么这可能会被关闭的症结,它基本上归结为一个基于意见的问题
  • 生成一个有效的对象几乎肯定意味着调用父类的构造函数,但是 Python 并没有强制执行。

标签: python constructor typechecking ooad duck-typing


【解决方案1】:

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

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

可以在 Python 中通过 isinstance 进行类型检查,尽管通常不需要也不需要这样做。

真的,对于duck typing,一般的过程是编写代码,包括构造函数,就像对象is a duck一样。也就是说,它具有您所期望的方法和行为。如果传入一个没有特定方法的对象,例如,这将引发运行时异常。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多