2016-06-09 61 views
0

假设我有一个下面的“演示”类:在蟒该方法必须被重写以验证类变量

class demo(object): 
    class_variable = None 

现在,只要有一个人设置“class_variable”,我需要验证的值(例如,class_variable只能有'str'类型的值)。

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

这可以用于实例变量通过重写SETATTR(个体,F,V)的方法进行。

怎样才可以对类变量做了什么?

+1

http://stackoverflow.com/q/5189699/1126841是一个近乎重复的;我没有足够的信心,它解决了投票结束自己的问题。 – chepner

回答

2

通过在元类定义相应__setattr__为类demo。作为一个例子:

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

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") 

定义,它使用该元类的类:

class demo(object): 
    __metaclass__ = DemoMeta 
    class_variable = None 

而现在,当你试图给class_variable值不是一个字符串的实例,DemoMeta.__setattr__将会被调用,检查和验证任务。

demo.class_variable = 12 

举:

ValueError: Only str values allowed 
+0

这将如何在python 3中实现?复制上述内容不会引发ValueError。 –

+0

@ juanpa.arrivillaga从'类演示(对象)'demo'类变更:...''来演示类(元类= MetaDemo):...'和删除'__metaclass__',因为它没有什么区别。 –

相关问题