2016-10-01 83 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