在python中,必须重写哪个方法来验证类变量

In python which method has to be overridden to validate the class variables

本问题已经有最佳答案,请猛点这里访问。

假设我有以下"演示"类:

1
2
class demo(object):
   class_variable = None

现在,每当有人设置"class_variable"时,我需要验证该值(例如,class_variable只能具有"str"类型的值)。

1
2
demo.class_variable = 15
# here int value is assigned, i want to raise exception for such cases

这可以通过覆盖setattr(self,f,v)方法对实例变量进行。

如何处理类变量?


通过在类demo的元类上定义适当的__setattr__。举个例子:

创建一个元类,该元类在其__setattr__方法中定义逻辑(可能希望基于属性的name执行检查:

1
2
3
4
5
6
class DemoMeta(type):
    def __setattr__(self, name, value):
        if isinstance(value, str):
            return super(DemoMeta, self).__setattr__(name, value)
        else:
            raise ValueError("Only str values allowed")

定义使用此元类的类:

1
2
3
class demo(object):
    __metaclass__ = DemoMeta
    class_variable = None

现在,当您试图给class_variable分配一个不是字符串实例的值时,DemoMeta.__setattr__将被调用、检查和验证分配。

1
demo.class_variable = 12

加薪:

1
ValueError: Only str values allowed