Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonクラス間の循環依存をどのように処理しますか?


Pythonクラス間の循環依存関係を示す次のコードがあります。

class P():
     q = Q().do_something();
     def do_something(self):
         pass
 class Q():
     p = P().do_something();
     def do_something(self):
         pass

クラスの場合、関数とは異なり、クラスの本体は定義時に実行されます。クラスPを定義するには、実際にQメソッドを呼び出す必要がありますが、クラスQがまだ定義されていないため、これを行うことはできません。

これを回避するには、クラスを定義し、後でプロパティを追加します-

class P(object):
   pass
class Q(object):
   pass
P.q = Q.do_something()
Q.p = P.do_something()

各do_something呼び出しが、すでに実行されている他の呼び出しに依存している場合、これは機能しません。問題を解決するには、さらに変更を加える必要があります。

クラスのインスタンスを作成するときではなく、クラスを定義するときにクラスレベル(q =Q.do_something())のディレクティブが実行されるため、クラスにはこれらの問題があります。

両方のクラスが定義された後、後でクラスの定義を完了する場合があります。これは、Pythonが動的言語であることを証明しています。


  1. Pythonで例外を処理する方法は?

    Pythonで例外を処理する最も簡単な方法は、「try-except」ブロックを使用することです。 例 try: fob = open("test.txt", "r") fob.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find the file or read data" else: print "Write operation is performed

  2. ループ内でPython例外を処理する方法は?

    次のように書き直すことで、コードの例外を作成できます a=[] foo = 'redbullz' try: for i in foo: a.append(i) print a[8] except Exception as e: print e 次の出力が得られます list index out of range Process finished with exit code 0