2016-07-08 6 views
-3

library.py

str = '' 
def setStr(input): 
    global str 
    str = input 
def getStr(): 
    return str 

今私は、モジュールにインポートし、それらを更新することができます...グローバル変数なしでこの作業を行うことはできますか?

module1.py

import library 
import module2 

library.setStr('wow') 
module2.run() 

module2.py

import library 

def run(): 
     print(library.getStr()) 

出力

wow 

グローバルコールを使用せずに示した機能を作成する方法はありますか?

ありがとうございます!

+1

あなたのライブラリーがあること何をしますPythonのロギングライブラリは、怠惰に見える以外、しないのですか?すでにPythonロギングライブラリには何千もの工数が投資されています。なぜあなたやあなたがその問題について誰かが「より良い方法でそれを複製できる」と思いますか?あなたの唯一のアイデアは(クラスやオブジェクトではなく)たくさんのグローバルを使うことなので、見通しはかなり荒々しいようです。 –

+0

私はよりよい方法で私の解決策を作る必要があることを意味しました。私は残念なことに私のニーズのためのロギングライブラリを使用することはできません。私はタイトルのあいまいさを理解しています。今変更する。 – user3732466

答えて

0

ロギングの方法は複製できますが、グローバル変数は使用しないで複製するにはどうすればよいですか?

logging uses global (module-level) variables to store its configurationとすることはできません。たとえば、root loggerはグローバル変数に保持されます。

(私が意味する、あなたはこれらの変数は、Logger.managerで行われているように、代わりにモジュールレベルのクラスレベルで生きることができたが、それは同じコードだいずれかの方法を嗅ぐ。)

+0

どのように?私はメソッドのコードを見てきました。グローバル変数を使用することはありません。 – user3732466

+0

['ルート'](https://hg.python.org/cpython/file/tip/Lib/logging/__init__.py#l1669)はグローバル変数です。 'Logger.manager'はクラス変数で、基本的には変装のグローバル変数です。 – Kevin

関連する問題