如何继承两个基类之一,决定运行时

时间:2016-04-22 05:57:28

标签: python oop

名为MyClass的基类存在于一个文件中,另一个基类MyClass1存在于另一个文件中。

我有两个平台suse10和suse11 linux。我有一个脚本,基于平台MyClass.py文件将被禁用suse10和MyClass1将被禁用suse11。

现在我想在另一个文件中使用另一个类,这两个平台都可以基于平台继承这些类中的任何一个。我该怎么办

让我们考虑将MyClass.py视为

class MyClass(AbsClass):
    def __init__(self,Sample):
         /*Constructor func*/

    /*Class Func*/

而MyClass1.py是

class MyClass1(AbsClass):
    def __init__(self,Sample):
        /*Constructor func*/

    /*Class Func with some additional functionalities*/

我希望SubClass.py文件为

from MyClass import MyClass
from MyClass1 import MyClass1
class SubClass(MyClass or MyClass1 based on which is enabled):
    def __init__(self,Sample):
        MyClass.__init__(self,Sample):

在剧本中

if PLATFORM==suse10
    rm -r MyClass.py /* Deletes and disables it */
elif PLATFORM==suse11
    rm -r MyClass1.py /* Deletes and disables it */

将此视为抽象代码。同时考虑有100个启用和禁用python文件的平台。如何使用类

的存在动态加载类文件

2 个答案:

答案 0 :(得分:2)

您可以根据平台

定义基类
if platform == 'Suse10':
    class BaseClass:
        ...

elif platform == 'Suse11':
    class BaseClass:
        ...
else:
    raise Exception('Unexpected platform')


class MyClass(BaseClass):
   ....

或像这样更优雅的东西

class BaseClassSuse10:
   ...

class BaseClassSuse11:
   ...

if platform == 'Suse10':
    BaseClass = BaseClassSuse10
elif platform == 'Suse11':
    BaseClass = BaseClassSuse11
...

MyClass(BaseClass):
    ...

或者,如果您有一个模块base.py,您可以在其中定义所有基类

if platform == 'Suse10':
    from base import BaseClass10 as BaseClass
elif platform == 'Suse11':
    from base import BaseClass11 as BaseClass

答案 1 :(得分:1)

您可以有条件地导入:

if is_suse10():
    from MyClass import MyClass as Base
elif is_suse11():
    from MyClass1 import MyClass1 as Base
else:
    raise UnsupportedPlatformError()

class SubClass(Base):
    def __init__(self, Sample):
        super(SubClass, self).__init__(Sample)

请注意,您拨打父母__init__的方式有点不同寻常,所以我也改变了。