16
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 ではなく Bar クラスである必要があります。

次のようなものはありますか:self.constructor()代わりに使用するには?

4

1 に答える 1

38

新しいスタイルのクラスの場合type(self)、「現在の」クラスを取得するために使用します。

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

self.__class__使用する値をそのまま使用することもできますがtype()、常に API メソッドを使用することをお勧めします。

古いスタイルのクラス (python 2、 から継承していないobject) の場合、あまり役に立たtype()ないので、以下を使用する必要がありますself.__class__:

def create_another(self):
    return self.__class__()
于 2013-01-08T06:54:45.043 に答える