2015-10-30 2 views
1

Я пытаюсь понять, что лучший способ повторного использования экземпляра класса в модуле в питоне ...повторного использования объект класса через модуль

В рубине я могу сделать это, выполнив следующие действия:

module MyMod 
    def client 
    @var ||= DBClient.new 
    end 

    def query 
    client.select(...) 
    end 
end 

было бы правильно предположить, что нижеследующее эквивалентно в python?

class Client(): 
    connection = DBClient() 

def query(): 
    Client().connection.select(...) 

В стандартах python было бы все в порядке? есть ли лучший подход? Спасибо за помощь.

ответ

1

Нет, эти вещи совсем не то же самое. Код Ruby создает соединение один раз и присваивает его экземпляру var; код Python создает новый экземпляр Client каждый раз, когда вызывается query, хотя они совместно используют экземпляр соединения.

Но нет необходимости в дополнительной упаковке. Если вы хотите создать его один раз, сделать это на уровне модуля:

connection = DBClient() 

def query(): 
    connection.select(...) 

Действительно, вы должны прекратить писать рубин в Python; если вы хотите написать Python, вы должны научиться писать вещи идиоматически в Python, а не просто переводить свой Ruby-код напрямую.

+0

Большое спасибо за комментарий ... Это будет второй вопрос, но может просто использовать поток ... есть ли эффективный способ гарантировать, что класс создается один раз только в python? Я угадываю, несмотря на язык, мы должны предотвращать звонки ... – Bodao

+0

@ user3087106 Посмотрите «python singleton» в Google, чтобы узнать, как создать экземпляр класса только один раз. –

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