我有一个泛型类UsbLib
,我想将其用作一个简单的干净API。但是我希望这个课程根据具体情况成为另一个班级。
class UsbLib:
def __new__(self):
if this_is_latest_ubuntu():
return UsbUDisks2() # Doesn't work
class UsbUDisks2(UsbLib):
def list_devices():
print("Listing devices..")
例如,如果我在Ubuntu中运行以下代码
lib=UsbLib()
我希望它在内部解析为
lib=UsbUDisks2()
我该怎么做?
答案 0 :(得分:1)
您正在寻找名为Factory pattern的东西。 简单来说,您不直接实例化类,而是调用一个函数来执行逻辑并将正确的类/对象返回给您使用。
def factory_function():
if(something):
return Class1()
else:
return Class2()
CC = factory_function()
...
...
甚至更好,使用普通父母并在该父母中使用静态方法来获得正确的孩子
class ClassFather:
@staticmethod
def factory():
if(something):
return Class1()
else:
return Class2()
class Class1(ClassFather): # not really necessary to have inheritance, only if common functionality
pass
class Class2(ClassFather): # not really necessary to have inheritance, only if common functionality
pass
答案 1 :(得分:1)
你最好用某种factory pattern.
来做最简单的形式:
def createUsbLib(params):
if this_is_latest_ubuntu():
return UsbUDisks2()
else:
return UsbLib()