2009-11-20 3 views
0

이것들이 무엇을 위해 사용되는지, 특히 self 인수를 이해하지 못합니까? 제발 이걸 제게 설명해 주시겠습니까? 왜 지구상에서 이것을 전달하고 싶습니까?파이썬에서 'self'와 '__init__'표현의 의미는 무엇입니까?

또한 나는 항상 __init__이 '초기화'라고 생각했지만 이전에는 아무것도 넣지 않았다고 생각하지 않았습니다. 누군가가 나에게 쉬운 예를 들어 줄 수 있습니까?

편집 : 나는 단지 self이 함수 또는 이와 유사한 것으로 전달되는 것을 볼 때마다 혼란스러워합니다.

+5

"자기"는 대문자로 사용하지 마십시오. 그것은 '자기'라고 쓰여졌습니다. 소문자. 어떤 파이썬 튜토리얼을 읽고 있습니까? 책의 링크 또는 이름을 입력하십시오. –

답변

18

self은 메소드를 호출하는 객체입니다. 자바에서는 this과 약간 비슷합니다.

__init__은 초기화 할 때 각 객체에서 호출 될 때 호출됩니다. Java의 생성자와 같습니다.

객체를 만들 때 객체의 속성 (Java의 멤버 변수)을 설정할 때마다 __init__을 사용합니다. "빈"객체가 만족 스럽다면 __init__ 메소드가 필요하지 않지만 인수를 사용하여 객체를 생성하려면 필요합니다.

예제는 다음과 같습니다

우리는 우리가 만든 물체를 볼 수 있습니다

class StackOverflowUser: 
    def __init__(self, name, userid, rep): 
     self.name = name 
     self.userid = userid 
     self.rep = rep 

dave = StackOverflowUser("Dave Webb",3171,500) 
:

>>> dave.rep 
500 
>>> dave.name 
'Dave Webb' 

그래서 우리가 __init__을 볼 수는 인수를 전달 우리는 함께 생성자에게 준 self과 함께 생성 된 개체에 대한 참조입니다. 그런 다음 인수를 처리하고 객체를 적절히 업데이트 할 때 self을 사용합니다.

다른 언어에서 필요하지 않은 이유는 파이썬이 self 인 이유입니다. Python FAQ에 따르면

왜 '자체가'법의 정의와 통화에서 명시 적으로 사용되어야한다?

첫째, 당신이 명시 적으로 참조하거나 전화를 할 경우

둘째, 그것은 특별한 구문이 필요 없다는 것을 의미한다 ... 당신이 방법을 사용 또는 인스턴스 대신 지역 변수의 속성 것을 더 분명 메소드를 특정 클래스의 ...

마지막으로, 예를 들어, 변수를 사용하면 구문상의 문제를 해결할 수 있습니다. 파이썬의 로컬 변수는 (정의에 따라) 함수 본문에 지정된 값 전역 적으로 명시 적으로 선언되지 않은 경우), 인터프리터에게 할당이 인스턴스 변수 대신에 인스턴스 변수에 대입 할 것을 지시하는 방법이 있어야합니다 지역 변수, 그리고 바람직하게는 구문 론적이어야합니다 (효율성상의 이유로) ...

2

C++/Java의 "this"매개 변수로 생각하면 클래스의 인스턴스를 참조하는 데 사용됩니다. 클래스 인스턴스 생성자으로 __init__

Class Whatever: 
    def __init__(self, some_parameter): 
    self.instance_parameter = some_parameter 

생각합니다.

3

자체는 방법을 호출하는 개체의 인스턴스입니다. 예를 들어

: 그런데

class MyClass: 
    """A simple example class""" 
    def __init__(self): 
    print "MyClass class created" 
    i = 12345 
    def f(self): 
    return self.i 

# Create an object called a of type MyClass. This will print "MyClass class created" 
a = MyClass() 

# Run the method - should return 12345 
print a.f() 

# Make another instance of the class to illustrate they are separate. 
b = MyClass() 
# Set a.i to another value. 
a.i = 1 

# Note the result 
print a.f() 
print b.f() 

, 당신이 자기를 호출 할 필요가 없습니다, 당신은 당신이 원하는대로를 호출 할 수 있습니다. 항상 첫 번째 매개 변수가됩니다.

+0

내가 본다면, 'self'가 원할 경우 범위를 변경하겠습니까? "나는이 값에 접근하려고합니다.하지만 먼저 메서드에 국한되지 않기 때문에 어디 있는지 말해야합니까?" – sm1991