2011-10-24 5 views
4

생성자에서 Bike의 인스턴스를 반환해야합니다. 나는, 나는 다음과 같은 오류 위의받을 수 있나요 때생성자에서 클래스 인스턴스 반환

class Bike(object): 
    def __init__(self,color): 
     self.bikeColor = color 
     return self #It should return an instance of the class; is this not right? 

myBike = Bike("blue") 

는 : 예를 들어이 경우

TypeError: __init__() should return None, not 'Bike' 

를 그 만 return None로 가정하면 어떻게 인스턴스를 반환 할 수 있을까?

+1

아니요, 오류가 나타나면 e를 입력하십시오. – JBernardo

+1

초기화 프로그램입니다. 인스턴스를 반환하려면'__new__'을 시도하십시오. – JBernardo

답변

4
class Bike(object): 
    def __init__(self, color): 
     self.bikeColor = color 

myBike = Bike("blue") 

충분합니다. 파이썬에서 __init__은 실제로 생성자가 아닙니다. 이니셜 라이저입니다.이 이미 구축 오브젝트를하고 bikeColor 속성을 설정 (예를 들어, 초기화

파이썬은 의미 생성자에 가까운 무언가가 -.. __new__ 방법을 당신은) (온라인 그것에 대해 here is a good SO discussion를 읽을 수 있지만 나는 의심 이 시점에서 실제로 필요하지는 않습니다.

+1

'__init__'은 C++ 또는 Java 생성자와 마찬가지로 생성자이며 호출 될 때까지 이미 존재하는 객체의 멤버도 초기화합니다. 나는 C++ 또는 Java 생성자에서'return this '을 본 것을 기억하지 못합니다. '__new__' 메소드는 Java 또는 C++에서 ** 할 수없는 ** 작업을 수행합니다. 나는'__init__'가 초기화 자라고해야한다고 주장하는 반면,'__new__'는 생성자라고 주장하며, 정말 혼란 스럽습니다. – Ben

+1

용어에 대해 분쟁이있는 것 같습니다. 주목해야 할 중요한 점은 Eli의 설명은 근본적으로 모든 카운트에서 정확하다는 것입니다. 당신이 그것을 다른 무언가라고 말하고 싶다면 그것은 당신에게 달린 것입니다. –

+0

@ 레이몬드 예, 저는 용어에 대해 분쟁이 있습니다. 나는 그것을 다른 것으로 부르고 싶지 않습니다. 파이썬이 개발되기 전에 수십 년 동안 사용 된 개념과 동일한 단어를 계속 사용하고 싶습니다. "__init__은 실제 생성자가 아닙니다."이미 생성자에 익숙한 새로운 Python 프로그래머에게는 불필요한 혼란이 있습니다. 특히 "__new__"은 생성자입니다. "__new__'는 ** less * * Java/C++ 생성자와 마찬가지로'__init__'가 사용합니다. – Ben

0

이 경우에는 생성자를 반환 할 곳을 생각해 볼 수 있습니다.이 경우 별도의 메서드를 사용하여 수행 할 수 있습니다. ,

class A: 
def __init__(self): 
    self.data = [] 
def newObj(self): 
    return A() 
관련 문제