使用常见的导入方法定义子类

时间:2016-01-20 20:50:51

标签: python file class import subclass

我一直在构建一个python图像处理模块,用于处理与激光束相关的图像。图像的内容(激光束图像,散射光图像等)不同,文件类型根据用于捕获图像的仪器而不同。但是任何一种文件类型都可以包含任何一种内容类型。

目前模块的结构是

  • 父类:包含所有类型内容的通用方法
    • 子类1:包含对内容类型1有用的方法
      • 孙子类1:仅用于导入文件类型的__init__()语句a
      • 孙子类2:仅用于导入文件类型b的__init__()语句
    • 子类2:包含对内容类型2有用的方法
      • 孙子类1:仅用于导入文件类型的__init__()语句a
      • 孙子类2:仅用于导入文件类型b的__init__()语句

问题在于孙子类基本相同,因为它们包含用于导入不同类型文件的代码,这些文件可能包含来自任一子类的内容。

有更优雅/ pythonic的方法吗?

我应该注意,不同的文件类型需要不同的预处理,因此解决方案并不像使用例如PIL可以识别标准图像文件扩展名。

1 个答案:

答案 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具有相同的行为实施的方法。