С оператором в Python возвращает объект None, хотя метод __init__ работает

Для класса БД со следующимв этом метод:

class DB:
    def __init__(self, dbprops):
        self.dbprops = dbprops
        self.conn = self.get_connection(self.dbprops)
        debug("self.conn is %s" %self.conn)

    def __enter__(self):
        pass
    def __exit__(self, exc_type, exc_val, exc_tb):
        if not self.conn is None:
            self.close()

И для метода клиента, вызывающего его следующим образом:

with DB(self.dbprops) as db:
    if not db:
        raise Exception("Db is None inside with")
    return db.get_cmdline_sql()

Выходные данные показывают сообщение отладки - таким образомв этом метод был успешно вызван:

  File "./classifier_wf.py", line 28, in get_cmdline_mysql
      raise Exception("Db is None inside with")

Исключение: Db is None внутри с

Обновление: исправленовойти способ вернуть объект БД. Но нужна помощь о том, как вызвать его:

  def __enter__(self, dbprops):
    return DB(dbprops)

Вызов его с одним параметром, по-видимому, не работает:

 with DB(dbprops) as db:

TypeError: __enter__() takes exactly 2 arguments (1 given)

Теперь я не следую, потому чтоЯ» должен быть заполнен автоматически ..

Ответы на вопрос(1)

Решение Вопроса

протокол менеджера контекста обрабатывается__enter__() а также__exit__() методы; первый должен возвращать значение для назначения.

 javadba21 мая 2013 г., 00:28
ах я вижу .. вернуть экземпляр БД. хорошо спасибо
 Ignacio Vazquez-Abrams21 мая 2013 г., 00:26
Почему вам нужно сделать это где-нибудь еще, кроме как?__init__()
 javadba21 мая 2013 г., 00:27
Это где это делается в настоящее время. так что тогда ваш ответ овойти больше не похоже на разницу: если это так, пожалуйста, объясните дальше. - он уже был на месте (я добавил этот контент в ОП, поскольку им пренебрегали) "
 javadba21 мая 2013 г., 00:24
назначение соединения (conn). то есть где это должно быть сделано (желательно только в одном месте)
 Ignacio Vazquez-Abrams21 мая 2013 г., 00:27
... должен вернуть значение для назначения. "
 Ignacio Vazquez-Abrams21 мая 2013 г., 00:24
Какое дублирование кода?
 javadba21 мая 2013 г., 00:23
Понимаю. Как избежать дублирования кода междув этом ивойти  ведь не все клиенты будут использовать "с": они могут создавать экземпляры напрямую
 Ignacio Vazquez-Abrams21 мая 2013 г., 00:41
Facepalm def __enter__(self): return self

Ваш ответ на вопрос