所以我有一个Superclass(为了简单起见,我会称之为),Mammal,Dog,Monkey和Bear等类继承了方法。一些继承的方法返回一个对象,该对象需要与调用它的类相同。例如,Dog.find(...)
应该返回Dog对象。但由于find()
方法是从Mammal继承的,因此无法将方法编码为显式return Dog(...)
。它需要能够返回Dog,Monkey,Bear或Mammal对象,具体取决于self.__class__.__name__
的值。
我用return eval(self.__class__.__name__)(...)
实现了这一点,但我宁愿避免使用eval。还有更好的方法吗?
答案 0 :(得分:3)
试试return self.__class__()
答案 1 :(得分:2)
使用classmethod制作工厂:
class Mammal(object):
@classmethod
def new(cls, *args, **kwds):
return cls(*args, **kwds)
class Dog(Mammal):
def find(self):
return self.new()
>>> d = Dog()
>>> d2 = d.find()
>>> type(d2)
<class '__main__.Dog'>