【问题标题】:Atribute Checking inside Class PythonPython 类中的属性检查
【发布时间】:2021-10-06 16:42:10
【问题描述】:

我想知道在 Python 中验证 __init__ 中的输入的最佳做法是什么。

我一般会在召唤物体之前验证它,但我认为这不是最好的选择。据我所知,一个类应该负责处理它的属性并识别它们是否适合使用。

例子:

让我们创建一个名为 Time 的类,它具有“小时”、“分钟”和“秒”作为参数(都是 int),并且需要立即将它们转换为通常的表示形式。 构造函数接收属性:10h - 75min - 70sec。 应在构造函数期间转换(?):11h - 16min - 10 sec.

Pythonic 的做法是什么?

【问题讨论】:

  • 取决于您希望如何使用该类。您需要保留原始值吗?一种可能的解决方案是使用将即时执行转换的属性。
  • 您能提供一些代码示例吗?不需要原始值。

标签: python oop constructor


【解决方案1】:

为了验证一个属性,你应该定义一个你可以这样做的属性方法。考虑一下:

class Person:
    def __init__(self, age):
        self._age = age

    @property
    def _age(self):
        return self._age

    @_age.setter
    def _age(self, value):
        if value < 0:
            raise ValueError('Age can not be less than zero!')
        self._age = value


p = Person(-5)

运行这个 sn-p 会导致 ValueError。通过这种方式,您可以引发异常(就像在 sn-p 中所做的那样)或将给定值更改为有效值。这个决定取决于你。

【讨论】:

    猜你喜欢
    • 2019-02-11
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多