Python 3.x - 在将项追加到列表之前运行函数

时间:2016-01-31 17:43:36

标签: python list class python-3.x inheritance

在Python 3.x中,是否可以在项目附加到列表之前运行函数?

我有一个继承自列表的类,带有一些额外的自定义函数。我想对要添加到此列表的任何元素的数据执行一系列检查。如果添加的元素不符合某些条件,则列表将引发错误。

class ListWithExtraFunctions(list):

   def __beforeappend__(self):

      ... run some code ...
      ... perform checks ...
      ... raise error if checks fail ...

2 个答案:

答案 0 :(得分:3)

定义ListWithExtraFunctions.append并在super().append(value)通过所有检查后致电value

class ListWithExtraFunctions(list):
    def append(self, value):
        if okay():
            return super().append(value)
        else:
            raise NotOkay()

答案 1 :(得分:0)

此选项与Vaultah编写的解决方案非常相似。它只使用“try ... except”,它允许你以某种方式处理异常。

class Nw_list(list):


    def val_check(self, value):
        # Accepts only integer
        if type(value) == int:
            return value
        else:
            # Any other input type will raise exception 
            raise ValueError

    def append(self, value):
        try:
            # Try to append checked value
            super().append(self.val_check(value))                                      
        except ValueError:
            # If value error is raised prints msg
            print("You can append only int values")