私は Python を使い始めたばかりで、これはクラスのロジックと実装に関する非常に一般的な質問です。質問の基本的なレベルで申し訳ありませんが、他の人にも役立つことを願っています。より明確にするために、いくつかのコンテキストを次に示します。
環境
画像を表すクラスを作成したい。この画像には、3 つのバンド (3 つの異なるファイルに関連付けられた R、G、B) といくつかのメタデータ (3 つのバンド ファイルのファイル パスと、カメラ、地理的位置などのその他の情報を含む 1 つのファイル) が含まれています。
問題の私の考え方では、Image クラスには Metadata 型の属性と Band 型の 3 つの属性を含める必要があります。
クラス メタデータには、さまざまな情報を読み取って返すメソッドが必要です
クラス Band には、各ラスター バンドの分析と処理のためのメソッドが必要です。ただし、これらのメソッドは Metadata に含まれる情報にアクセスする必要がある場合があります。
私のコード
だからここに私がすることがあります:
class Metadata:
def __init__(self, meta_file_path):
self.Path = meta_file_path
def ReadBandPath(self,band_number):
[...]
def ReadLocation(self):
[...]
def ReadCameraInfo(self):
[...]
def GetSomeOtherInfo(self):
[...]
class Band:
def __init__(self,Metadata, band_number):
self.Meta = Metadata
self.Number = band_number
self.Path = self.Meta.ReadBandPath(self.Number)
def DoSomething(self):
self.Meta.GetSomeOtherInfo()
[...]
class Image:
def __init__(self, meta_file_path)
self.Meta = Metadata(meta_file_path)
self.Band1 = Band(self.Meta, 1)
self.Band2 = Band(self.Meta, 2)
self.Band3 = Band(self.Meta, 3)
def SaveAsPng(dest_file):
[...]
私の問題
私のやり方は少し冗長に思えます。さらに重要なことに、それは「静的」に見えます。Image.BandN を作成した後で Image.Meta の一部の情報を更新すると、Image.BandN.Meta が同時に更新されないように見えますよね?
- 問題を正しく設定および実装していますか?
- Metadata 属性を Band オブジェクトに動的に渡す最もスマートな方法は何でしょうか?