Python类与其他类的替换?

2024-10-01 22:27:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个泛型类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()

我该怎么做


Tags: selfapinewifislibdef情况
2条回答

你最好用一些factory pattern.

以最简单的形式:

def createUsbLib(params):
   if this_is_latest_ubuntu():
      return UsbUDisks2()
   else:
      return UsbLib()

你正在寻找一种叫做工厂模式的东西。 简单地说,您不直接实例化类,而是调用一个函数,该函数执行逻辑并将正确的类/对象返回给您使用

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

相关问题 更多 >

    热门问题