Python 从类变量在类内分配全局变量

Python 从类变量在类内分配全局变量,python,python-2.7,class,Python,Python 2.7,Class,我有一个关于Python中的类的问题。我创建了一个类似以下内容的类: class Model(Object): __table__ = 'table_name' def func(): def func2(): if backfill: model = Model(True).func() else: model = Model.func() 表名是函数提供的全局变量。我正在尝试添加旧数据,因此我想根据是否从旧信息中填写来更改表名,所以这就是

我有一个关于Python中的类的问题。我创建了一个类似以下内容的类:

class Model(Object):

    __table__ = 'table_name'

    def func():

    def func2():
if backfill:
     model = Model(True).func()
else:
     model = Model.func()
表名是函数提供的全局变量。我正在尝试添加旧数据,因此我想根据是否从旧信息中填写来更改表名,所以这就是我尝试的

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():
最后一个电话是这样的:

class Model(Object):

    __table__ = 'table_name'

    def func():

    def func2():
if backfill:
     model = Model(True).func()
else:
     model = Model.func()
然后我意识到这是行不通的,因为我不能从类定义之外调用self.backfill。我甚至尝试创建一个定义并在类中调用它,但这也不起作用

我的问题是:

  • 是否有方法从类变量初始化类内部的全局变量?或者有没有更好的方法

  • \uuuu table\uuu
    是一个类variabe,这意味着您可以从实例或类本身访问它。您可以根据
    \uuuu init\uuuu
    方法中的
    回填
    值更新任何实例值:

    class Model(Object):
        __table__ = 'table_name'
        def __init__(self, backfill = False):
            self.backfill = backfill
            if self.backfill:
                self.__table__ = 'table_name2'
    
    class Model(Object):
        def __init__(self, backfill = False):
            self.backfill = backfill
            self.__table__ = 'table_name'
            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
    
    但是我不认为在你的例子中使用类变量有什么意义。您可以在
    \uuuu init\uuuu
    方法中定义它:

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

    表名是函数反馈的全局变量-您能否澄清“反馈”是什么意思?您是否看过
    \uuuuuu table\uuuuuu
    不是全局变量。如果self.backfill因不存在selfself而出错,则它是class
    Model
    的一个属性。你到底想做什么?从理论上讲,没有一个类属性(或全局变量)可以依赖于一个实例(即self),因为可以有多个实例,但只有一个类。谢谢Frodon!这正是我想要的——我是面向对象编程的新手,所以我无法清楚地表达我想要的到底是什么,但你能够绕过它!谢谢