IT’s Portfolio

[Python] Class 생성 시 self 인자에 대해서 본문

Development Study/Python

[Python] Class 생성 시 self 인자에 대해서

f1r3_r41n 2020. 5. 19. 14:38
728x90
반응형
class exam:
    def f1():
        print("123")
    def f2(self):
        print("456")

exam 클래스에 self 인자를 주지 않은 f1 메서드와 self 인자를 준 f2 메서드가 있다.

 

f = exam()
f.f1()

* f는 객체이다. f는 exam의 인스턴스이다.

 

f의 f1 메서드를 수행하면

넘겨주는 인자가 없어야 하는데 1개의 인자가 자동으로 넘어가서 오류가 난다.

 

f.f2()

하지만 f의 f2 메서드를 수행하면

정상적으로 print 문이 수행되는 것이 보인다.

=> 파이썬은 메서드 첫 번째 인자로 항상 인스턴스를 전달해준다. 그렇기 때문에 f1 메서드 수행 시 오류가 나는 것이다.

 

class exam:
    def f1():
        print("123")
    def f2(self):
        print(id(self))
        print("456")

f = exam()
f.f2()
print(id(f))

f2 메서드를 수행할 때 파이썬이 보내는 self의 id 값을 확인하기 위해 코드를 추가해보자.

그리고 인스턴스의 id 값도 확인해보자.

* id 함수는 객체의 고윳값, 보통 객체에 할당된 메모리 주솟값을 반환해준다.

f2 메서드의 self와 exam의 인스턴스인 f의 id 값은 서로 같은 것을 알 수 있다.

즉, self는 f는 exam의 인스턴스임을 알려주는 값이다.

 

exam.f1()
exam.f2()

이번에는 객체를 생성하지 않고 클래스에서 바로 메서드를 호출시켜보자.

f1 메서드는 정상적으로 수행이 되었지만 f2 메서드는 self 인잣값을 전달하지 않았다며 오류가 났다.

 

f = exam()
exam.f2(f)

self는 인스턴스 값을 전달해준다고 했다.

그렇기에 f 객체를 만들어준 후 f2 메서드에 f를 인잣값으로 주면 정상적으로 수행된다.

728x90
반응형
Comments