
TIL#25 클래스 와 인스턴스(중요)
클래스와 인스턴스 # 파이썬 클래스 # OOP(객체 지향 프로그래밍), Self, 인스턴스 메소드, 인스턴스 변수 # 클래스 and 인스턴스 차이 이해 # 네임스페이스 : 객체를 인스턴스화 할 때
higher77.tistory.com
위 내용의 보충설명을 위해 작성되었다.
class Cal: def __init__(v1, v2): print(v1,v2) def add(): return v1 + v2 c1 = Cal(10,10) print(c1.add())
만약 Cal클래스가 위와 같이 생겼다면
v1과 v2는 __init__메소드의 지역변수(그 함수 안에서만 사용되는 변수)이기 때문에
add메소드는 값을 구할 수 없고 에러가 나온다.
<#물론, __init__함수도 self 매개변수가 없기 때문에 실행안됨.>
그걸 해결하기 위해서 Self 매개변수를 사용해야한다.
////////////////////////////////////////////////////////////////////////////////////////
self는 뭘 의미하는 걸까?
class Person: def __init__(self): self.hello = '안녕하세요.' def greeting(self): print(self.hello) james = Person() james.greeting() # 안녕하세요.
self는 인스턴스 자기 자신을 의미한다.
그래서 우리는 이 매개 변수를 이용해서 그 인스턴스에 소속되는 변수를 지정할 수 있게 된다.
인스턴스가 생성될 때 self.hello = '안녕하세요.'처럼 자기 자신에 속성(변수)을 추가했다.
self.hello = '안녕하세요. <- 이것을 인스턴스 속성(변수)라고 하는 것이다.
여기서 __init__의 매개변수 self에 들어가는 값은 Person()이라 할 수 있다.
그리고 self가 완성된 뒤 james에 할당된다.
greeting도 마찬가지다.
첫번째 인자로 self를 주면 self가 인스턴스를 가리키는 것이기 때문에
self.hello를 통해서 인스턴스 변수 hello를 쓸 수 있게 되는 것이다.
(인스턴스 이용하면 이제 다른 메소드에서도 __init__변수를 사용할 수 있다!)
이 후 greeting메서드를 호출 하면 현재 인스턴스가 자동으로
매개변수 self에 들어와서
james.greeting() # 안녕하세요. 를 출력할 수 있게 되는 것이다.

#여기서 첫번째 인자를 굳이 self로 안해도 된다. 그냥 dfsd이런식으로 마음대로 지정해도 된다.
#하지만 일종의 관례처럼 self를 쓴다.
/////////////////////////////////////////////////////////////////////////////////////////////////////
class Cal: def __init__(self, v1, v2): print(v1,v2) self.v1 = v1 self.v2 = v2 def add(self): return self.v1 + self.v2 c1 = Cal(10,10) #10 10 print(c1.add()) #20
전에 지역변수 때문에 사용하지 못했던 v1,v2를 인스턴스 속성(변수)로 선언함으로써
add메소드에서도 v1,v2 정상적으로 가져와서 사용할 수 있게되었다!
'Python > Today I learned' 카테고리의 다른 글
TIL#36 하위,동일,상위폴더 파일 import하기 (0) | 2021.05.20 |
---|---|
TIL#35 객체, 클래스, 인스턴스 관계정리(매우 중요) (0) | 2021.05.20 |
TIL#33 CSV 파일 읽기 및쓰기 (0) | 2021.05.19 |
TIL#32 파일 읽기 및 쓰기 (0) | 2021.05.19 |
TIL#31 외장함수 (0) | 2021.05.19 |