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 정상적으로 가져와서 사용할 수 있게되었다!

 

 

 

 

 

 

 

+ Recent posts