상세 컨텐츠

본문 제목

[인프런 리프 2기] 04. 파이썬 중급 과정 2주차(2) 클래스 심화-2

경험/2021 인프런리프2기

by mizu-umi 2021. 3. 20. 11:43

본문

728x90

관련글 ▼

[인프런 리프 2기] 01. 수강권으로 수강 신청하기

[인프런 리프 2기] 02. 파이썬 중급 과정 1주차 강의

[인프런 리프 2기] 03. 파이썬 중급 과정 2주차(1) 클래스 심화-1


파이썬 클래스 심화 : 클래스 & 메소드 심화 (2)

  • 클래스 변수 vs 인스턴스 변수
  • 클래스 메소드 실습
  • 네임스페이스 이해

앞선 클래스 심화 1번에서 클래스 구조의 중요성에 대해 배웠다면 2번에서는 클래스 안에서 이루어지는 다양한 작동에 대해서 더 깊게 배우는 시간이었다.

 

파이썬을 배우면서 종종 용어가 헷갈린다는 글을 많이 봤는데 클래스 심화 2번 강의를 들으면서 왜 그런 말이 나오는지 실감했다.  어떤 때는 변수라고 부르다가 어떤 때는 인자라고 부르고 인스턴스라고 부르다가 객체라고 부르고 😫 강의 당 시간은 20분이 채 되지 않는데다 1.5배속으로 듣고 있음에도 불구하고 전혀 이해가 가지 않는 부분을 이해하기 위해 구글링하느라 2시간 이상 소요한 것 같다.


Bang Bang Bang~


클래스에서 Self의 의미

#클래스구조
class Car():
    def __init__(self, company, details):
        self._company = company
        self._details = details
        
car1 = Car('Ferrari', {'color': 'White', 'horsepower': 400, 'price': 8000})

self는 클래스를 기반으로 생성된 인스턴스 고유의 값을 저장하기 위한 예약어이다. 예를 들어 car1이라는 객체에 Car()이라는 클래스를 바인딩했다면 Car()이라는 클래스의 메소드 안에 있는 self에 car1이라는 객체의 인스턴스 고유값이 저장된다(고 이해했다).


함수의 구조를 생각해보자. 

def 함수이름(매개변수)
    수행문1
    수행문2

클래스에 들어가는 함수, 즉 메소드에 처음으로 들어가는 매개변수는 무조건 Self가 들어간다.그리고 그런 self 인자를 받는 메소드를 인스턴스 메소드 (Instance Method)라고 부른다.

내가 클래스를 잘 이해하지 못하고 있었다.

 

속성을 보는 방법

# dir & __dict__
print(dir(car1)) #내가 해당 객체에 부여한 속성과 파이썬이 부여하는 속성 모두를 보여줌
print(car1.__dict__) #딕셔너리 형태로 내가 부여한 속성만 보게할 수 있음
print(Car.__doc__) #해당 클래스에 달려있는 주석을 보게 해줌.

 

클래스에 정보를 가져오는 메소드를 넣었을 경우

#클래스구조
class Car():
    ...(생략)
    def detail_info(self): #정보를 가져오는 메소드
        print('Current ID: {}'.format(id(self)))
        print('Car Detail Info: {} {}'.format(self._company, self._details.get('price')))

detail_info와 같이, 객체의 정보를 가져오는 메소드를 넣었을 때 두 가지 방법으로 정보를 읽어올 수 있다.

  • car1.detail_info() - 객체.메소드로 정보를 읽을 수 있다.
  • Car.detail_info(car1) - 클래스.메소드(인스턴스). 클래스를 직접 언급할 때에는 parameter로 인스턴스를 직접 언급해줘야한다.

※ 주의 사항 ※

Car.detail_info()

단순히 클래스.메소드() 라고 입력해버리면 self가 정의되어 있지 않아서 아래와 같은 오류가 난다.

Traceback (most recent call last):
  File "c:\workspace\python_seed\venv\c02_02.py", line 57, in <module>
    Car.detail_info()
TypeError: detail_info() missing 1 required positional argument: 'self'

→ TypeError 자료형 오류. detail_info()는 self라고 하는 정해진 인자가 없음

 

클래스 변수

class Car():
    # 클래스 변수 
    car_count = 0

    # 인스턴스 메소드
    def __init__(self, company, details):
        self._company = company
        self._details = details
        Car.car_count += 1

- 클래스 변수는 메소드 밖에 작성해야 한다. 클래스 변수가 작성되면 모든 인스턴스(self)가 해당 변수를 공유하게 된다.

 

네임 스페이스란?

변수가 객체를 바인딩할 때 그 둘 사이의 관계를 저장하고 있는 공간을 의미한다.(출처: wikidocs.net/1743)


< 강의 출처 - 인프런 우리를 위한 프로그래밍 파이썬 중급 (Inflearn Original) >

 

 

728x90
반응형

관련글 더보기

댓글 영역