名为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文件的平台。如何使用类
的存在动态加载类文件答案 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__
的方式有点不同寻常,所以我也改变了。