从类变量中分配类内的全局变量

时间:2016-10-01 00:06:06

标签: python python-2.7 class

我对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. 有没有办法从类变量初始化类中的全局变量?或者是否有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分: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'