ネットワークプログラミング、スレッド化、OOPスキルに取り組んでいるように感じました。私は問題に遭遇しました。 私はIRCというクラスとPongというクラスを持っています。私はIRCを使ってサーバへの接続、メッセージの送信などをしたいと思っています。「PING」を含むメッセージをチェックするバックグラウンドでスレッドとしてPongを使用したいと思います。Pythonで2つのクラス間で変数を共有する
class IRC:
def Connect(self):
try:
HOST = sys.argv[1]
PORT = sys.argv[2]
except IndexError:
print "Usage: "+sys.argv[0]+" [server] [port]\n"
sys.exit(1)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
class Pong(threading.Thread):
def Pong(self):
while 1:
IRC.s.send("Test") # IRC has no attribute 's'
上記のコードが簡素化され、テスト目的のみのために、私の質問は、私は別のクラスから1クラスで変数を使用することができる方法であることに留意してください。変数s
はIRCで宣言され定義されていますが、Pongでも必要です。 インタプリタは、クラスIRCに属性 's'がないことを訴えています(私はConnect()を最初にサンプル変数で呼び出そうとしましたが、そうではありません)。
どうすれば解決できますか?スレッディングとオブジェクトの向きについては、私は新しいです。
ありがとうございます!
あなたが実際にあなたのオブジェクトに属性を追加することを確認してください。現在、 's'はローカル変数として定義されています。多分 's'を' self.s = socket.socket(...) 'と定義したいでしょうか? –
@JeffMercadoご意見ありがとうございます。私は変数に 'self'を追加しようとしましたが、うまくいきませんでした。 – Griffin
まあ問題は、あなたの 'IRC'クラスのインスタンスを作成する必要がありますが、あなたはクラス変数にアクセスしようとしています(' IRC.s'を実行しています)。基本的なOOPの原則やPythonを一般的に説明することをお勧めします。 –