我是 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 \nRun Code Online (Sandbox Code Playgroud)\n\n例如,为了验证“操作”,我需要检查每个属性的大量限制和有效值。例如,我有一个有效的“type_”字符串列表,我应该断言 type_ 在此列表中。
\n\n1)最好的方法是在构造函数中?我应该创建一个方法来进行此验证吗?或者我应该创建一个新类只是为了验证数据?
\n\n2)我应该在哪里创建这些有效值列表?在构造函数中?作为全局变量?
\n您可以通过使用以下函数来使用 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)