我检查了一些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”。
谢谢。
答案 0 :(得分:2)
type(self)
将返回对当前实例的类对象的引用。
def weird_copy(self):
name = self._name + " weird"
z = type(self)(name)
return z