1

こんにちは、オブジェクト指向プログラミングと Python はまだ初心者で、少し行き詰まっています。

1 つのファイルにはクラスが含まれ、別のファイルはこのクラスにアクセスし、3 つ目のファイルはメイン ファイルで作成されたオブジェクトにアクセスする必要があります。

クラスファイル

#Class.py
class myclass:
   def method(self, value)
   return value

メインファイル

#Main file

import Class

Myobj = Class.myclass

ファイル3。

#file 3
x= 10
#I need to access the output of myobj.method(x) from file3 but I cannot import main 
#into file 3

私のプログラムでは、メイン ファイルがクラスを初期化します (クラスはファイルを読み込み、初期化時にファイルの内容を配列に割り当てます)。

クラス ファイルは数学演算 (クラス ファイル内のメソッド関数) も実行しますが、この関数はファイル 3 で計算される値に依存します。

したがって、myobj.method(x) がファイル 3 に出力する値が必要です。x の値は、プログラムの実行時に変化するため、myobj.method(x) からいくつかの出力が得られます。

問題は、メインファイルがユーザーが選択した任意の名前になる可能性があるため、メインファイルをファイル 3 に単純にインポートできないことです。

4

2 に答える 2

5

最初の出力を保存する場合にのみ、これを行うことができます:myobj.method(3)

#Main file

import Class

myobj = Class.myclass()
output = myobj.method(3)

Main.outputインポート後に参照できるようになりましたMain

print何も保存しません。後続の式を文字列に変換し、それらの文字列を標準出力に書き込むだけです。技術的には、 を試して置き換えることができますがsys.stdout、実際の元の値ではなく、文字列のみをキャプチャします。

ただし、ある種の API をサード パーティに公開して、サード パーティのClassモジュールとサード パーティのモジュールの両方をインポートするように思えます。その場合、代わりに API のユーザーに 3 番目のライブラリのフック メソッドを呼び出すか、値を設定してもらいます。

import thirdmodule

thirdmodule.configure(myobj.method(3))

これにより、循環インポートもうまく回避されます。

別のオプションはClass、更新の責任を負うことthirdmoduleです。myclass.method()更新するコードを追加の最後にthirdmodule

#Class.py

import thirdmodule

class myclass:
    def method(self, arg):
         # Do your thing
         retval = some_calculation()

         thirdmodule.x = retval

         return retval
于 2013-10-03T17:03:21.270 に答える
0

まず、メソッド定義を次のように変更します。

def method(self, value):
    return value

次に、メイン ファイルの名前が mainfile.py であると仮定して、変数に値を代入myobj.method(3)する必要があります。と呼びましょうval

したがって、印刷行は次のようになりますa = myobj.method(3)

次に、3 番目のファイルで、メイン ファイルをimport mainfile. .py延長は不要です。それ以降は簡単です。出力は変数に格納されますmainfile.val。あなたはそれにアクセスすることができます。

また、メイン ファイルでは、Myobj最初にオブジェクトを呼び出してから、それmyobjを修正したいと思うかもしれません。

于 2013-10-03T17:10:25.310 に答える