从超类中创建子类 - Python

Create subclass from within superclass - Python

我查看了一些 Whosebug 文章,但找不到我的问题的答案,如果这是重复的,我深表歉意。我能找到的收盘价是 Instantiate subclass from superclass 但这仍然不是我想要的。

所以假设我有三个 class:1 个超级 class 和 2 个子 class,我想做一些奇怪的复制方法,对我所有的 classes。但特别是,我的副本需要是所述对象的新实例。示例:

class Pet(object):
    def __init__(self,name):
        self._name = name
    def weird_copy(self):
        name = self._name + " weird"
        z = XXX(name)

class Dog(Pet):
    def __init__(self,name):
        self._name = name + " dog"

class Cat(Pet):
    def __init__(self,name):
        self._name = name + " cat"      

XXX 部分是我不知道该做什么的地方。如果我这样做

d = Dog('ralph')
d2 = d.weird_copy()

我希望 d2 是 Dog 对象而不是 Pet 对象。我尝试用 self 替换 XXX,这开始引起问题。我知道有一种方法可以执行@class方法,但问题是我需要使用自己的属性,所以我不需要将 "self" 切换到 "cls".

谢谢。

type(self) 将 return 引用当前实例的 class 对象。

def weird_copy(self):
    name = self._name + " weird"
    z = type(self)(name)
    return z