2015-08-21 2 views
2

Я получаю доступ к данным из разных учетных записей из онлайн-платформы по их API. Я создал класс Account, который содержит всю информацию, необходимую для доступа к этому API. Я хочу иметь возможность устанавливать учетную запись (и необходимую информацию для получения доступа) каждый раз, прежде чем я сделаю запрос API. Я попытался сделать функцию, которая установит глобальную переменную Acct в соответствующий экземпляр класса учетной записи, но после вызова метода select_account() Acct продолжает возвращать '', есть ли лучший способ справиться с этим типом процедуры?Как изменить глобальную переменную в python?

Acct = '' 
def choose_account(): 
    global Acct 
    get = raw_input(r'Adap1, Adap2, Adap3, or Adap4? ') 
    if get == 'Adap1': 
     Acct = Adap1 
    elif get == 'Adap2': 
     Acct = Adap2 
    elif get == 'Adap3': 
     Acct = Adap3 
    elif get == 'Adap4': 
     Acct = Adap4 
    else: 
     print ("Please type Adap1, Adap2, Adap3, or Adap4 ") 

Редактировать: показать счета и т.д. Adap1

class Account(): 

    def __init__(self, name, username, password, org_id): 
     self.name = name 
     self.username = username 
     self.password = password 
     self.org_id = org_id 

    def update_pw(self, pw): 
     self.password = pw 

Adap1 = Account('Adap1', 'username', 'password', 'org_id') 
+1

где вы устанавливаете Adap1,2,3 и 4? Они выглядят так, будто они пусты от этого кода. – SirParselot

+0

Как вы определяете 'Adap1',' Adap2', 'Adap3',' Adap4'? Сейчас вы рассматриваете их как переменные в своем назначении «Acct = Adap1», но я подозреваю, что вы, возможно, захотели присвоить 'Acct' строке' 'Adap1''? – scrappedcola

+0

Но если это так, вы могли бы просто сделать Acct = get, если войти ('Adap1', ...) else None'. – Kevin

ответ

4

Извините, но использование глобальных переменных таким образом, обычно не хороший способ пойти. Вы, вероятно, новичок в программировании, поэтому я не хочу, чтобы вы чувствовали, что вас «отзывают», но это было бы much более разумным, чтобы функция возвращала значение, а затем задала глобальную переменную с утверждением как

Acct = choose_account() 

в этом случае ваша функция должна выглядеть следующим образом (непроверенный код):

def choose_acct(): 
    while True: 
     get = raw_input(r'Adap1, Adap2, Adap3, or Adap4? ') 
     if get == "Adap1": 
      return Adap1 
     elif get == "Adap2": 
      return Adap2 
     elif get == "Adap3": 
      return Adap3 
     elif get == "Adap4": 
      return Adap4 

еще лучше, вы могли бы рассмотреть подход управляемых данных проблемы, а также определить словарь подобные

adict = {"Adap1": Adap1, "Adap2": Adap2, "Adap3": Adap3, "Adap4": Adap4} 

Тогда ваша функция может прочитать (опять же, непроверенная)

def choose_acct(): 
    while True: 
     get = raw_input(r'Adap1, Adap2, Adap3, or Adap4? ') 
     result = adict.get(get, None) 
     if result: 
      return result 

Как ваш уровень опыта растет, вы начнете понимать разницу между хорошим и плохим кодом, но вы сделали очень хорошую попытку.

+0

Спасибо, очень ценю обратную связь! – bpr

+0

В таком случае я был бы признателен, если вы пометили ответ как принято ;-) – holdenweb

+0

Я вижу эту строку «while True:» в большом количестве кода, но я не совсем уверен, зачем это необходимо или какая польза от нее, не могли бы вы ум, объясняющий это мне немного? – bpr

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