在 python 中验证数据的最佳方法是怎样的?

Fer*_*ani 2 python validation

我是 Python 新手,我\xc2\xb4m 试图找到验证数据的最佳方法。

\n\n

我有一个“well”类型的对象,它具有其他对象的属性。数据可以来自 XML 文件或通过代码。下面是一个例子。

\n\n
\nclass Well:\n    def __init__ (self, name, group):\n        self.__name   = name     # Required\n        self.__group  = group    # Required\n        self.__operate_list = [] # Optional\n        self.__monitor_list = [] # Optional\n        self.__geometry = None   # Optional\n        self.__perf = None       # Optional\n        ...\n\nclass Operate:\n\n    # *OPERATE (*MAX|*MIN) type value (action)\n    # *OPERATE (*PENALTY) type (mode) value (action)\n    # *OPERATE (*WCUTBACK) type mode v1 (v2 (v3)) (action)\n\n    def __init__ (self, att:str, type_:str, value: [], mode=None, action=None):\n        self.__att = att\n        self.__type_ = type_\n        self.__mode = mode\n        self.__value_list = value\n        self.__action = action        \n
Run Code Online (Sandbox Code Playgroud)\n\n

例如,为了验证“操作”,我需要检查每个属性的大量限制和有效值。例如,我有一个有效的“type_”字符串列表,我应该断言 type_ 在此列表中。

\n\n

1)最好的方法是在构造函数中?我应该创建一个方法来进行此验证吗?或者我应该创建一个新类只是为了验证数据?

\n\n

2)我应该在哪里创建这些有效值列表?在构造函数中?作为全局变量?

\n

blh*_*ing 5

您可以通过使用以下函数来使用 getter 和 setter 方法property

class Operate:
    def __init__(self, type):
        self.type = type

    @property
    def type(self):
        return self._type

    @type.setter
    def type(self, value):
        assert value in ('abc', 'xyz')
        self._type = value
Run Code Online (Sandbox Code Playgroud)

以便:

o = Operate(type='123')
Run Code Online (Sandbox Code Playgroud)

会导致:

Traceback (most recent call last):
  File "test.py", line 18, in <module>
    o = Operate(type='123')
  File "test.py", line 8, in __init__
    self.type = type
  File "test.py", line 15, in type
    assert value in ('abc', 'xyz')
AssertionError
Run Code Online (Sandbox Code Playgroud)