我正在开发一个暴露很多功能的 class .

所有这些函数都接受可变数量的输入参数,这些参数需要通过某些标准进行验证,并且有时会进行转换 . 验证例程不是计算密集型的,但有点长(大约30行代码) .

为了避免反复重复模式,无意义地增加了我的代码的大小,我决定将它实现为静态方法,并在需要验证时在函数内部调用它 .

下面是我所描述的一个小例子:

class MyClass():

    def function_a(self, var1, var2):
        var1 = MyClass._validate_input_a(var1, 'var1')
        var2 = MyClass._validate_input_a(var2, 'var2')
        # ...

    def function_b(self, var):
        var = MyClass._validate_input_a(var, 'var')
        # ...

    def function_a(self, var1, var2, var3):
        var1 = MyClass._validate_input_a(var1, 'var1')
        var2 = MyClass._validate_input_b(var2, 'var2')
        var3 = MyClass._validate_input_b(var3, 'var2')
        # ...

    @staticmethod
    def _validate_input_a(input, parameter_name:str) -> bool:

        if input is None:
            raise ValueError('The "%s" parameter is invalid.' % parameter_name)

        if not isinstance(input, list):
            raise TypeError('The "%s" parameter must be a list.' % parameter_name)

        # many other checks...

        input = transform(input

        return input

    @staticmethod
    def _validate_input_b(input, parameter_name:str) -> bool:

        # same as a, but with different checks...

这就像一个魅力,但在我看来,代码失去了一点用户友好性,我的课程变得有点难以调试因为 .

如果发生验证错误,我必须查看堆栈跟踪以查看问题的根源,同时将错误直接引入函数体 .

在这种情况下,输入验证的最佳做法是什么?你能建议我一个更好的方法吗?也许描述符是一个可行的选择?