我一直在构建一个python图像处理模块,用于处理与激光束相关的图像。图像的内容(激光束图像,散射光图像等)不同,文件类型根据用于捕获图像的仪器而不同。但是任何一种文件类型都可以包含任何一种内容类型。
目前模块的结构是
__init__()
语句a __init__()
语句__init__()
语句a __init__()
语句问题在于孙子类基本相同,因为它们包含用于导入不同类型文件的代码,这些文件可能包含来自任一子类的内容。
有更优雅/ pythonic的方法吗?
我应该注意,不同的文件类型需要不同的预处理,因此解决方案并不像使用例如PIL可以识别标准图像文件扩展名。
答案 0 :(得分:1)
使用2个mixin类:
class FileTypeAMixin:
<logic>
class FileTypeBMixin:
<logic>
class Parent:
<logic>
class Child1(Parent):
<logic>
class Child2(Parent):
<logic>
class Child1GrandChild1(FileTypeAMixin, Child1):
<logic>
class Child1GrandChild2(FileTypeBMixin, Child1):
<logic>
class Child2GrandChild1(FileTypeAMixin, Child2):
<logic>
class Child2GrandChild2(FileTypeBMixin, Child2):
<logic>
修改强>
正如OP所指出的,建议始终将mixins放在父类之前,以便在调用MRO
时防止奇怪的super()
行为,以防每个父类/ mixin具有相同的行为实施的方法。