gpt4 book ai didi

python - 将验证附加到现有的 Python 列表实例

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:43 24 4
gpt4 key购买 nike

我有一个现有的列表实例,它在实时代码中自始至终都有引用。当列表引用传递到某个函数时,我需要确保该列表中的所有项目从该点开始都有效(验证所有列表项,然后附加验证以供将来更改)。

创建一个覆盖 __setitem__ 和 friend 的新类,同时从列表派生提供所需的验证(PropertyList 如下所示)。问题是代码的其他部分指向旧的列表引用,并且由于这是库的一部分,我无法真正要求开发人员考虑这一点(它破坏了向后兼容性,并且会以这样的方式咀嚼代码:一开始是不明显的)。

我是否可以“实时”更改列表项的类,以便对列表的所有引用现在都将调用修改后的 __setitem__ 等方法?

class PropertyList(list):

def __init__(self, validator, *args, **kwargs):
self.__validator = validator
super(PropertyList, self).__init__(*args, **kwargs)

def __setitem__(self, key, value):
value = self.__validator(value)
super(PropertyList, self).__setitem__(key, value)

def append(self, value):
value = self.__validator(value)
super(PropertyList, self).append(value)

def extend(self, other):
other = map(self.__validator, other)
super(PropertyList, self).extend(other)

def insert(self, index, value):
value = self.__validator(value)
super(PropertyList, self).insert(index, value)

最佳答案

不,没有。即使您可以替换 __class__ 属性,您也不应该尝试这样做,因为它会令人困惑,并且可能会以微妙的方式破坏。如果您需要创建验证列表,则需要创建一个新对象并使用它来代替旧对象。

关于python - 将验证附加到现有的 Python 列表实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7876114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com