2013-01-08 12 views
7
class Foo(): 
    def __init__(self): 
     pass 
    def create_another(self): 
     return Foo() 
     # is not working as intended, because it will make y below becomes Foo 

class Bar(Foo): 
    pass 

x = Bar() 
y = x.create_another() 

yはFooのクラスではありません。独自のインスタンスのPythonコールコンストラクタ

何かがありますか?self.constructor()代わりに使用しますか?新しいスタイルのクラスでは

答えて

24

、「現行」クラスを取得するためにtype(self)を使用します。

def create_another(self): 
    return type(self)() 

ことがtype()が使用する値であるとして、あなたはまた、self.__class__を使用することができますが、APIメソッドを使用することが常に推奨されます。古いスタイルのクラス(のpython 2、objectから継承していない)のために

、あなたがself.__class__を使用するように強制されているのでtype()が、それほど便利ではありません。

def create_another(self): 
    return self.__class__() 
+2

@Billiska:あなたはそうする正当な理由がない限り私は新しいスタイルのクラスを使用したいと思います。 'Foo'を' object'から継承させます。 –

関連する問題