在Python中基于__class __.__ name__返回一个对象

时间:2011-07-10 06:06:51

标签: python

所以我有一个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。还有更好的方法吗?

2 个答案:

答案 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'>