2016-06-09 31 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__',因爲它沒有什麼區別。 –

相關問題