优化嵌套类方法中的输入验证

问题描述 投票:0回答:1

我有以下示例类:

class MyClass:
    @classmethod
    def method1(cls, value):
        print(f'method1 called with value: {value}')
        cls.method2(value)
        cls.method3(value)

    @classmethod
    def method2(cls, value):
        print(f'method2 does something with supplied value: {value}')

    @classmethod
    def method3(cls, value):
        print(f'method3 does something with supplied value: {value}')

如你所见,这里有一个嵌套的逻辑。

method1
必须调用方法
method2
method3
。现在,每次调用任何方法(我有更多方法)时,我都想验证输入值。我可以定义一个类方法,然后在每个函数的开头调用
cls._verify(cls, value)
。但是,这意味着我的输入将被多次验证。

如何高效地对一组类方法(包括嵌套调用)执行输入验证,而不需要多次冗余地验证输入?

python decorator verification metaclass class-method
1个回答
0
投票

添加一个额外参数,指示

value
是否已被验证。

class MyClass:
    @classmethod
    def method1(cls, value, verified=False):
        if not verified:
            cls._verify(value)
        print(f'method1 called with value: {value}')
        cls.method2(value, verified=True)
        cls.method3(value, verified=True)

    @classmethod
    def method2(cls, value, verified=False):
        if not verified:
            cls._verify(value)
        print(f'method2 does something with supplied value: {value}')

    @classmethod
    def method3(cls, value, verified=False):
        if not verified:
            cls._verify(value)
        print(f'method3 does something with supplied value: {value}')
© www.soinside.com 2019 - 2024. All rights reserved.