2016-10-01 87 views
0

我有一個關於Python中的類的問題。我創建了一個如下所示的類:從類變量分配類內全局變量

class Model(Object): 

    __table__ = 'table_name' 

    def func(): 

    def func2(): 

表名是一個全局變量,函數的輸入源自該函數。我試圖添加舊數據,所以我想根據舊信息填寫表來更改表名,所以這就是我的嘗試。

class Model(Object): 

    def __init__(self, backfill = False): 
     self.backfill = backfill 

    if self.backfill: 
     __table__ = 'table_name' 
    else: 
     __table__ = 'table_name2' 

    def func(): 

    def func2(): 

最終的調用將是這樣的:

if backfill: 
    model = Model(True).func() 
else: 
    model = Model.func() 

然後,我意識到這是行不通的,因爲我不能從類定義之外self.backfill調用。我甚至嘗試創建一個定義並在課堂內部調用,但那也不起作用。

我的問題是:

  1. 有沒有一種方法來初始化從類變量類中的全局變量?還是有更好的方法來做到這一點?
+0

*表名是一個全局變量的函數養活了*的 - 你能澄清你說「餵過的」是什麼意思? – Li357

+0

你看過http://stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-that-c​​reated-them – WookieCoder

+0

'__table__'不是*全局變量*。它是'Model'類的一個屬性。 – zvone

回答

1

__table__是一類變量,這意味着你可以從一個實例或類本身訪問它。您可以根據backfill__init__方法值更新任何實例值:

class Model(Object): 
    __table__ = 'table_name' 
    def __init__(self, backfill = False): 
     self.backfill = backfill 
     if self.backfill: 
      self.__table__ = 'table_name2' 

然後創建一個實例,只是給backfill參數的構造函數,沒有任何if/else語句:

print(Model.__table__) 
# table_name 
backfill = True 
model = Model(backfill) 
print(model.__table__) 
# table_name2 

但我沒有看到在你的情況下使用類變量的要點。你可以只在__init__方法定義它:

class Model(Object): 
    def __init__(self, backfill = False): 
     self.backfill = backfill 
     self.__table__ = 'table_name' 
     if self.backfill: 
      self.__table__ = 'table_name2' 
+0

謝謝你Frodon!這正是我所期待的 - 我是面向對象編程的新手,所以不能清楚地說明我想要的是什麼,但是你能夠解決這個問題!謝謝! – RDizzl3