0

質問がばかげている場合は親切に教えてください。しかし、私は基本的に c/c++ のバックグラウンドを持っています。

次のコードがあります。

#!/usr/bin/python

import os


class Logger(object):

    def __init__ (self):
        print "Constructor of Logger "

    def logMsg(self):
        print "logMsg::"


class FileLogger (Logger):
    def __init__ (self):
        print "Constructor of File Logger"
    def logMsg (self):
        print "FileLogger::"

class FTPLogger (Logger):

    def __init__ (self):
        print "Constructor of FTP Logger"

    def logMsg (self):
        print "FTPLogger::"


def logMsg(log):
    print "Logging Message"
    logHandler.logMsg()    # **HERE: HOW POSSIBLE TO ACCESS logHandler Variable?**


logHandler = FileLogger ();
logMsg(logHandler);

質問:

FileLogger クラスの logMsg() 関数はどのように logHandler にアクセスできますか?

「logHandler」はグローバル変数であると見なすことはできますか?

4

2 に答える 2

2

関数の外で logHandler 変数を定義すると、その変数はモジュール (基本的には Python ファイル) 内のスコープでグローバルになり、logMsg(log) のような関数内で表示 (および参照) できます。

ただし、作成したコードのコンテキストでは、logHandler オブジェクトを logMsg 関数に渡しているため、logHandler をそのように使用するのは間違いだと思われます。logMsg 関数は次のようになります。

def logMsg(log):
    print "Logging Message"
    log.logMsg()

そうしないと、別のオブジェクトを関数に渡すと、ログに渡したオブジェクトではなく、グローバル変数 logHandler にあるオブジェクトにアクセスしようとします。

この他の質問への回答は、Python のスコープに関する詳細を提供します。

スコーピング規則の簡単な説明?

于 2013-08-19T19:21:42.710 に答える