はじめに
このプロジェクトでは、銀河帝国のクローン工場においてクローン兵に固有の ID を生成する Weapon Factory クラスを実装する方法を学びます。Weapon Factory クラスは反復子として設計されており、固有の ID のシーケンスを簡単に生成および管理できるようになっています。
👀 プレビュー
------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a
🎯 タスク
このプロジェクトでは、以下を学びます。
- Python でカスタム反復子クラスを作成する方法
- 順次的に固有の 16 進数 ID を生成する方法
- 反復子クラスを使用して ID のシーケンスを生成および管理する方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- Python でカスタム反復子クラスを実装する
- 順次的に固有の 16 進数 ID を生成する
- 反復子クラスを使用して ID のシーケンスを管理する
- ID の検証などの追加機能で反復子クラスを拡張する
WeaponFactory クラスを実装する
このステップでは、WeaponFactoryクラスを反復子クラスとして実装する方法を学びます。
- コードエディタで
soldier_generator.pyファイルを開きます。 - 以下の要件で
WeaponFactoryクラスを定義します。__init__()メソッドは文字列引数を受け取る必要があります。この引数は武器工場の開始 ID です。__next__()メソッドは順次的に次の ID を生成する必要があります。生成される ID は 8 桁の 16 進数文字列を含む文字列でなければなりません。__iter__()メソッドはWeaponFactoryインスタンス自体を返す必要があります。これにより、クラスを反復子として使用できるようになります。
以下はWeaponFactoryクラスのコードです。
class WeaponFactory:
def __init__(self, start_id):
self.current_id = int(start_id, 16)
def __iter__(self):
return self
def __next__(self):
hex_id = hex(self.current_id)[2:]
self.current_id += 1
return hex_id.zfill(8)
__init__()メソッドでは、int()関数を使用して 16 進数(基数 16)でstart_id文字列を整数に変換することで、current_id属性を初期化しています。
__next__()メソッドでは、hex()関数を使用してcurrent_idを 16 進数文字列に変換し、その後スライシング[2:]を使用して先頭の'0x'を削除します。そして、current_idを 1 増やします。最後に、zfill()メソッドを使用して、必要に応じて先頭にゼロを埋めることで、ID 文字列が常に 8 文字になるようにしています。
__iter__()メソッドは単にWeaponFactoryインスタンス自体を返すだけで、クラスを反復子として使用できるようにします。
WeaponFactory クラスをテストする
これでWeaponFactoryクラスを実装したので、期待通りに動作しているかどうかをテストしましょう。
soldier_generator.pyファイルのif __name__ == "__main__":ブロックに以下のコードを追加します。
wf = WeaponFactory("1000face")
print("------test1-------")
print(next(wf)) ## 出力:'1000face'
print(next(wf)) ## 出力:'1000facf'
print(next(wf)) ## 出力:'1000fad0'
count = 0
max_count = 10
print("------test2-------")
for id in WeaponFactory("1000f000"):
print(id)
count += 1
if count > max_count:
break
soldier_generator.pyファイルを保存して、スクリプトを実行します。
python3 soldier_generator.py
出力は以下のようになるはずです。
------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a
これにより、WeaponFactoryクラスが期待通りに動作しており、__next__()メソッドが呼び出されると順次的に次の ID を生成し、反復子として使用されると ID を反復処理することが確認されます。
まとめ
おめでとうございます!このプロジェクトを完了しました。技術力を向上させるために、LabEx でさらに多くの実験を行って練習してください。



