생성자를 실제로 "생성자"라고 부르는 이유는 무엇입니까?
생성자 (이름 __new__)는 클래스의 새 인스턴스를 만들고 반환합니다. 따라서 C.__new__클래스 메서드는 클래스 C 의 생성자 입니다.
C.__init__만든 후 인스턴스 메소드는 호출자에게 다시 전달되기 전에를 초기화하기 위해, 특정 인스턴스라고합니다. 따라서이 메서드는 C의 새 인스턴스에 대한 이니셜 라이저 입니다.
클래스의 메서드와 어떻게 다릅니 까?
에 명시된 바와 같이 공식 문서 __init__ 입니다 인스턴스가 생성 된 후라고합니다 . 다른 방법은이 치료를받지 않습니다.
그들의 목적은 무엇입니까?
생성자의 목적은 C.__new__새 C인스턴스를 생성하는 동안 사용자 지정 동작을 정의하는 것 입니다.
이니셜 라이저의 목적 은 생성 된 후의 C.__init__각 인스턴스에 대한 사용자 지정 초기화를 정의 C하는 것입니다.
예를 들어 Python을 사용하면 다음을 수행 할 수 있습니다.
class Test(object):
pass
t = Test()
t.x = 10 # here you're building your object t
print t.x
그러나의 모든 인스턴스 가 10과 같은 Test속성을 갖도록하려면 x해당 코드를 내부에 넣을 수 있습니다 __init__.
class Test(object):
def __init__(self):
self.x = 10
t = Test()
print t.x
모든 인스턴스 메서드 (클래스의 특정 인스턴스에서 호출되는 메서드)는 인스턴스를 첫 번째 인수로받습니다. 그 인수는 일반적으로 self.
constructor와 같은 클래스 메서드는 __new__대신 클래스를 첫 번째 인수로받습니다.
이제 x속성에 대한 사용자 지정 값을 원한다면 해당 값을 인수로 전달하면됩니다 __init__.
class Test(object):
def __init__(self, x):
self.x = x
t = Test(10)
print t.x
z = Test(20)
print t.x
나는 이것이 당신이 의심을 제거하는 데 도움이되기를 바랍니다. 그리고 당신은 이미 다른 질문에 대한 좋은 답변을 받았기 때문에 여기서 멈추겠습니다 :)
__init__는 이니셜 라이저 입니다. 파이썬 생성자 는__new__. 파이썬은 자동 2 단계 초기화를 사용합니다-__new__유효하지만 (보통) 채워지지 않은 객체 (bool반대 예제 참조)를 반환 한 다음__init__자동으로 호출합니다. 이렇게하면 C ++와 같은 언어가 부분적으로 생성 된 객체와 관련된 문제를 피할 수 있습니다. Python에는 객체가 하나도 없습니다 (부분적으로 초기화 될 수 있음). 클래스__new__와__init__클래스 모두를 재정의 할 필요가 거의 없습니다 .