2013-01-08 3 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 bar가되어야합니다.자체 인스턴스의 파이썬 호출 생성자

다음과 같은 것들입니까? self.constructor() 대신 사용 하시겠습니까? 그 type()가 사용하는 값이지만, API 방법을 사용하는 것은 항상 추천으로 또한 self.__class__를 사용할 수

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

:

새로운 스타일의 클래스

답변

24

은 '현재'클래스를 얻을 수 type(self)를 사용합니다.

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

@Billiska : 당신이 self.__class__를 사용하도록 강요되도록

이전 스타일 클래스 (안 object에서 상속 파이썬 2)의 경우

type(), 그래서 도움이되지 않습니다 당신이 그렇게 할 이유가 없다면 새로운 스타일의 클래스를 사용하겠습니다. 'Foo'는'object'로부터 상속받습니다. –