반응형
self 매개변수
클래스를 선언하고 메소드를 작성할때 반드시 매개변수로 self 값을 받도록 해야 한다고 했다.
이에 대해 더 자세히 알아보자.
먼저 다음과 같이 클래스를 선언하고 메소드 두개를 작성했다.
class Fox:
def fun1():
print('fun1')
def fun2(self):
print('fun2')
a = Fox()
a.fun2()
a.fun1()
fun1메소드는 매개변수를 아무것도 받지 않도록 선언했고,
fun2메소드는 배웠던 것처럼 self 매개변수를 받도록 선언했다.
fun2() 메소드는 self 매개변수를 받도록 선언했지만 메소드 실행시 변수를 넘기지 않고 실행해도 에러가 발생하지 않는다.
하지만 fun1 메소드를 실행하면 에러가 발생한다.
a.fun1()
TypeError: fun1() takes 0 positional arguments but 1 was given
fun1메소드는 매개변수를 받지 않도록 선언되어 있는데 매개변수를 받았다고 한다.
파이썬에서는 메소드 실행시 해당 클래스 인스턴스를 첫번째 인자로 전달되기 때문이다.
클래스네임을 사용하여 fun1 을 호출한다면 에러가 발생하지 않는다.
Fox.fun1()
fun2() 메소드를 호출할떄는 매개변수로 클래스객체를 넘겨주어야 한다.
class Fox:
def fun1():
print('fun1')
def fun2(self):
print('fun2 self : ', id(self))
a = Fox()
a.fun2()
Fox.fun2(a)
Fox.fun2(Fox)
'Dev > Python' 카테고리의 다른 글
with 문 (0) | 2023.09.22 |
---|---|
python virtualenv - 폐쇄망(오프라인)에서 설치하기 (0) | 2023.09.20 |
클래스 (0) | 2023.09.14 |
global, nonlocal ( 전역, 지역 변수 ) (0) | 2023.09.13 |
[python, venv, virtualenv] 파이썬 버전관리 - virtualenv (0) | 2023.09.12 |