Python类替换其他类?

时间:2014-11-13 15:27:19

标签: 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 devices..")

例如,如果我在Ubuntu中运行以下代码

lib=UsbLib()

我希望它在内部解析为

lib=UsbUDisks2()

我该怎么做?

2 个答案:

答案 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()