如何使用@property修饰器来限制列表中的值



我是python的新手。因此,如果我写错了什么,请随时更正。

我做了一个新类说ClassA它有一个属性modified,这是一个列表。

该类最初看起来像这样:

class ClassA:
def __init__(self):
self.modified = []

我希望在此列表中添加(或修改(的元素首先通过检查。例如。我只想要此列表中格式为YYYY-MM-DD的日期。所以我认为@propoerty装饰器可以做一些工作。我通过以下方式使用它:

class ClassA:
def __init__(self):
self._modified = []
@property
def modified(self):
return getattr(self, "_modified")
@modified.setter
def modified(self, value):
if not isinstance(value, list):
raise TypeError("value passed must be a list")
else:
modified_list = []
for item in value:
if isinstance(item, str):
result = performValidationCheck(item)
if not result:
raise ValueError("date format incorrect")
else:
modified_list.append(date.getDateAsString())
else:
raise TypeError("%s must be of type string")
self._modified = modified_list
def add_modified_date(self, date):
if not isinstance(date, str):
raise TypeError("date passed must be a string")
result = performValidationCheck(date)
if not result:
raise ValueError(libsbml.OperationReturnValue_toString(result))
self._modified.append(date)

但是,我仍然可以使用classA.modified[index]更改modified列表中条目的值。甚至追加函数也在此列表中工作。

我已经实现了performValidationCheck()功能,这不是这里关心的问题。

有人可以帮助我如何进行吗?

但是,我仍然能够通过使用classA.modified[index]更改修改列表中条目的值。甚至追加函数也在此列表中工作。但是,我仍然能够通过使用classA.modified[index]更改修改列表中条目的值。甚至追加函数也在此列表中工作。

答案是肯定的。@property仅控制获取/设置对象的属性。如果在属性上设置的对象是可变的,则它不能执行任何操作。

有人可以帮助我如何进行吗?

要么使用自定义的类似列表的集合(MutableSequence(来动态验证其值,要么改用元组(基本上是不可变的列表(,这样调用方将无法就地修改它。

相关内容

最新更新