とても奇妙なものを見つけました。以下のこのショートコードを参照してください。
import os
class Logger(object):
def __init__(self):
self.pid = os.getpid()
print "os: %s." %os
def __del__(self):
print "os: %s." %os
def temp_test_path():
return "./[%d].log" %(os.getpid())
logger = Logger()
これは、説明を目的としています。インポートされたモジュールos
を、クラスの委託と破棄について出力するだけです(名前は気にしないでLogger
ください)。ただし、これを実行すると、モジュールはクラスデストラクタでos
「消える」ように見えます。None
以下は出力です。
os: <module 'os' from 'C:\Python27\lib\os.pyc'>.
os: None.
私の問題はどこにあると言われos: None.
ていますか。最初の出力行と同じである必要があります。ただし、上記のPythonコードの関数を振り返ってくださいtemp_test_path()
。この関数の名前を少し変更して、たとえばtemp_test_pat()
、残りのすべてのコードをまったく同じにして実行すると、期待どおりの出力が得られます(以下を参照)。
os: <module 'os' from 'C:\Python27\lib\os.pyc'>.
os: <module 'os' from 'C:\Python27\lib\os.pyc'>.
バグであることを除いて、これについての説明は見つかりません。あなたはできる?ちなみに私はWindows764ビットを使用しています。