私は次のような状況があります。Application
はdata
をヘッダーとフッターに置き、checksum
を追加してpacket
を追加します。 TCP
はApplication
から継承し、Application
から得られたpacket
(すなわち、super
~make_packet
を呼び出してそれ自身のものにする)とまったく同じ手順を実行します。複数クラスの共通関数の書き換えを避ける
make_packet
コードは、ヘッダーとフッターの値を除いて、両方のクラスで同じなので、私は以下のようにクロージャを使用しようとしました。以下 重要な行はcmake_packet
でself.packet = cls_name.header + self.packet + cls_name.footer
次のとおりです。
def make_make_packet(cls_name):
def cmake_packet(self):
self.packet = cls_name.header + self.packet + cls_name.footer
checksum = self.packet[::-1]
self.packet += checksum
return self.packet
return cmake_packet()
class Application:
header = footer = "001101"
def __init__(self, data):
self.packet = data
make_packet = make_make_packet(Application)
class TCP(Application):
header = footer = "110011"
def __init__(self, data):
super().__init__(data)
self.packet = super().make_packet()
make_packet = make_make_packet(TCP)
とネットワークを介してデータのパケットを送信するために、私はちょうど呼び出し:
# data is something like "010"
tlayer = TCP(data)
# or send()
print(tlayer.make_packet())
問題は、上記の定義が与えられるということですエラーmake_make_packet(Application)
が呼び出された場合、Application
はまだ定義されていません。
、いくつかのクラスのための機能を繰り返すことなく、この問題を解決するためにそこの方法ですと(とにかくここでは動作しません)self.headerを使用せずに
注:make_packet()
が呼び出される必要があります(OSIの7層モデル)パケットは1回ではなく2回ずつ作成されます。最初にApplication
は、生データをパケットにラップし、パケットをさらに大きなパケットでTCP
でそれ自身のヘッダーを追加してさらにラップします。
「パケット」メソッドに継承を使用できない理由はわかりません。 –
@DanielRoseman私はあなたを取得していない、あなたは精巧さを教えてくださいできますか? 'packet'はメソッドではなく、インスタンス変数です。 – forumulator