2016-10-01 5 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-created-them – WookieCoder

+0

'__table__' не является * глобальная переменная *. Это атрибут класса 'Model'. – zvone

ответ

1

__table__ - это класс variabe, что означает, что вы можете получить к нему доступ из экземпляра или из самого класса. Вы можете обновить любое значение экземпляра в соответствии со значением backfill в __init__ метода:

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

Затем, чтобы создать экземпляр, просто дать параметр конструктору backfill, без каких-либо, если/другое заявление:

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

Спасибо, Фродон! Это именно то, что я искал - я новичок в объектно-ориентированном программировании, поэтому не мог сформулировать, что именно я хотел, но вы смогли обойти это! Благодаря! – RDizzl3

Смежные вопросы