파이썬 클래스, 메소드

hyeok2·2025년 1월 5일

python

목록 보기
7/7
post-thumbnail

인프런에서 파이썬 중급 강의가 2주 무료 수강이 가능하여 달리기 시작했다.

클래스

클래스 변수 vs 인스턴스 변수

  • 클래스변수
    - 클래스 자체에 속해있다.
    - 클래스 정의 바로 아래, 메서드 밖에서 정의 된다.
    - 모든 인스턴스가 공유한다. → 클래스 변수는 단 하나만 존재하며, 모든 인스턴스에서 동일한 값을 참조한다.
    - 클래스 이름으로 접근하거나, 인스턴스 객체 이름으로 접근이 가능하다.
    - 클래스 내에서 공통으로 사용되는 값이나, 인스턴스 생성횟수를 카운트하는 용도로 사용된다.

  • 인스턴스 변수
    - 각각의 인스턴스에 속해 있다.
    - init 메서드 내에서 self. 를 사용하여 정의된다.
    - 각 인스턴스마다 독립적인 값을 가진다.
    - 반드시 인스턴스 객체 이름으로만 접근해야한다. ( instance.variable)

    클래스 변수는 영역이 다르다. 인스턴스 변수는 self 내것

  • 네임스페이스 이해

    • 네임스페이스는 이름과 객체를 연결해주는 공간. 변수, 함수, 클래스 등의 이름이 저장되어 있는 공간.
    • dir(객체): 주어진 객체의 네임스페이스에서 사용할 수 있는 모든 이름 목록을 문자열 리스트로 반환. 클래스, 인스턴스 객체, 모듈 등에 적용하여 어떤 속성이나 메서드가 있는지 확인 가능.
    • 객체.dict: 주어진 객체의 네임스페이스를 딕셔너리 형태로 반환합니다. 딕셔너리의 키는 속성 이름이고, 값은 속성 값. 클래스, 인스턴스 객체에 적용하여 실제 저장된 값을 확인 가능

클래스 기반 메소드 심화

  • 메소드란? : 클래스 내부에 정의된 함수. 특정 객체의 동작이나 기능을 정의한다. ( 어떤 객체가 할 수 있는 일을 정의)
  • 클래스메소드
  • 인스턴스 메소드
  • 스태틱 메소드

인스턴스 메소드 ( 아무것도 안붙고, self를 받는다)

def detail_info(self): 와 같이 self 가 들어가면 인스턴스 메소드라고 생각하면 됨.

    # Instance Method 인스턴스 메소드
    # self : 클래스로 만든 객체의 고유한 속성 값 사용
    def detail_info(self):
        print('Current Id : {}'.format(id(self)))
        print('Car Detail Info : {} {}'.format(self._company, self._details.get('price')))
        
  • 직접 자기 인스턴스에 접근하는 방법은 좋지않다. → 인스턴스 메소드를 사용하여 정리함 → java 등에서는 프라이빗으로 막아둔다. → 자기 값이 변경되면 안되기 때문에.

클래스 메소드(@classmethod)

  • 원하는 로직을 추가할 수 있다.
    # Class Method 클래스 매소드는 첫번째 인자로 cls를 받는다.
    @classmethod
    def raise_price(cls, per):
        if per <= 1:
            print('Please Enter 1 or More')
            return
        cls.price_per_raise = per
        return 'Succeed! price increased.'

스태틱 메소드(@staticmethod)

  • 아무것도 전달받지 않는다. → 유연함
  • cls를 받거나 다른 인자를 안받는다면 가능하다.

클래스로 호출해도 되고, 인스턴스로 호출해도 가능하다.

# Bmw 여부(스테이틱 메소드 사용)
print('Static : ', Car.is_bmw(car1))
print('Static : ', Car.is_bmw(car2))
print()

print('Static : ', car1.is_bmw(car1))
print('Static : ', car2.is_bmw(car2))
profile
땅을 파다보면 흙과 물을 보겠지만, 코드를 파다보면 답이 보일것이다.

0개의 댓글