簡體   English   中英

將驗證附加到現有的Python列表實例

[英]Attach validation to an existing Python list instance

我有一個現有的列表實例,在實時代碼中始終都有引用。 當列表引用傳遞到某個函數時,我需要確保該列表中的所有項目從那時起都是有效的(驗證所有列表項目,然后附加驗證以用於將來的更改)。

在從列表派生的同時創建覆蓋__setitem__和朋友的新類可提供所需的驗證(如下所示的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__屬性,也不應嘗試這樣做,它會造成混亂,並且可能會以微妙的方式破壞。 如果需要創建驗證列表,則需要創建一個新對象並使用該對象而不是舊對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM