self
- self로 전달되는 것은 인스턴트 자체이다.
- self를 정의하지 않아도 에러가 나지 않는다.
- self를 정의하지 않은 메서드를 호출하면 오류가 발생한다.
- 파이썬 메서드의 첫 번째 인자로 항상 인스턴스가 전달되기 때문이다.
- 클래스 내에 정의된 self는 클래스의 인스턴스이다.
- 인스턴스.메서드( ) 와 클래스.메서드(인스턴스)는 같은 것이다.
- 클래스는 네임스페이스이므로 인스턴스를 생성하지 않아도 클래스 안의 메서드를 호출 할 수 있다.
class UserId:
def pass_self():
print("pass_self")
def create_id(self):
print(id(self)) # id로 인스턴스가 할당된 메모리 주소를 확인
print("create_id")
a_user = UserId()
print(id(a_user))
#a_user의 객체(클래스)와 create_id 메서드가 동일한 id를 갖는다.
a_user.create_id()
*a_user.pass_self( ) 는 오류, a_user.create_id( )는 결과를 호출한다.
=> 항상 첫 번째 인자로 인스턴스가 넘어가기 때문이다.
*UserId.pass_self( )는 결과, UserId.create_id( )는 오류를 호출한다.
=> self 위치에 인자를 전달하지 않았기 때문이다.
네임스페이스
- 변수가 객체를 바인딩할 때의 관계를 저장하고 있는 공간이다.
- 인스턴스마다 각자의 네임스페이스를 유지한다.
*바인딩이란? 변수가 객체를 가르키는 행위이다.
클래스 변수와 인스턴스 변수
클래스 변수
클래스 내부에 선언된 변수. 클래스 네임스페이스에 위치
인스턴스 변수
self 가 붙은 변수. 인스턴스 네임스페이스에 위치
- 인스턴스가 서로 공유해야 하는 값은 클래스 변수를 통해 바인딩 해야한다.
- 인스턴스 네임스페이스에 없는 이름은 클래스의 네임스페이스에서 찾는다.
'Python' 카테고리의 다른 글
[Python] 클로저(Closure) (0) | 2023.03.23 |
---|---|
[Python] 클래스 if __name__ =="__main__": (0) | 2023.03.23 |
[Python] 클래스 생성자(init 함수) (0) | 2023.03.23 |
[Python] CSV(comma-separated values) 파일 (0) | 2023.03.22 |
[Python] json 파일 (0) | 2023.03.22 |