从超类内部创建子类-Python

时间:2018-07-24 19:58:56

标签: python subclass instantiation superclass

我检查了一些stackoverflow文章,但是找不到我的问题的答案,如果这是重复的内容,请对不起。我能找到的收盘价是Instantiate subclass from superclass,但这仍然不是我想要的。

因此,假设我有三个类:1个超类和2个子类,并且我想做一些奇怪的复制方法,这对于我所有的类都是相同的。但特别是,我的副本必须是该对象的新实例。示例:

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,这开始引起问题。我知道有一种方法可以执行@classmethod,但是问题是我需要使用self的属性,因此不必将“ self”切换为“ cls”。

谢谢。

1 个答案:

答案 0 :(得分:2)

type(self)将返回对当前实例的类对象的引用。

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