当适配器已经是正确类型时忽略适配器创建

Ignore adapter creation when adaptee already of correct type

我有以下设置:

class Target(Base):

  def __init__(name: str):
    self.name = name


class Adapter(Target):

  def __init__(self, adaptee: Base, name: str):
    super().__init__(name=name)
    self.adaptee = adaptee


def as_target(adaptee: Base, name: str):
  if isinstance(adaptee, Target):
    return adaptee
  else:
    return Adapter(adaptee, name)

我想知道我是否可以摆脱 as_target 函数,而是处理适配器创建的逻辑。

从语义上讲,它将具有以下含义:

class Adapter(Target):

  def __init__(self, adaptee: Base, name: str):
    if isinstance(adaptee, Target):
      self = adaptee
    else:
      super().__init__(name=name)
      self.adaptee = adaptee

我试过重写 __new__ 但我没能成功。

class Base:
    pass


class Target(Base):
    def __init__(self, name: str):
        self.name = name

    def __repr__(self):
        return "{}({})".format(type(self).__name__, repr(self.name))


class Adapter(Target):
    def __new__(cls, adaptee: Base, name: str):
        if isinstance(adaptee, Target):
            return adaptee
        else:
            return super().__new__(cls)

    def __init__(self, adaptee: Base, name: str):
        super().__init__(name=name)
        self.adaptee = adaptee


print(Adapter(Base(), "a"))  # Adapter('a')
print(Adapter(Target("b"), "c"))  # Target('b')