我刚开始接触 Python,这是一个关于类的逻辑和实现的非常普遍的问题。我为这个问题的基本层面道歉,但希望它对其他人也有用。这里有一些上下文可以更清楚地说明:
语境
我想创建一个代表图像的类。此图像包括 3 个波段(R、G、B,与 3 个不同的文件相关联)和一些元数据(一个文件,其中包含 3 个波段文件的文件路径和其他信息,如相机、地理位置等)。
对于我思考问题的方式,Image 类应该包含一个 Metadata 类型的属性和三个 Band 类型的属性。
类元数据应该具有读取和返回各种信息的方法
Class 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 不会同时更新,对吧?
- 我是否正确设置和实施问题?
- 以动态方式将元数据属性传递给 Band 对象的最聪明的方法是什么?