Python类与其他类的替换?
我有一个通用类Python类与其他类的替换?,python,class,overloading,Python,Class,Overloading,我有一个通用类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 de
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()
我该怎么做呢?您正在寻找一种称为工厂模式的产品。 简单来说,您不直接实例化类,而是调用一个执行逻辑并返回正确类/对象供您使用的函数
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
你最好用某种方法 以最简单的形式:
def createUsbLib(params):
if this_is_latest_ubuntu():
return UsbUDisks2()
else:
return UsbLib()