파이썬 기본 문법6(클래스)

파이썬 기본문법 시리즈 6편입니다.

다른 파이썬 기본문법 시리즈는


클래스

  • 객체(object) = 속성(Attribute) + 기능(Method)
  • 속성 : 유형/무형의 특징.
  • 기능 : 유형/무형의 특징적인 동작
  • 파이썬 : 속성 -> 변수, 기능 -> 함수(메서드)
  • 클래스와 객체의 관계
    • 클래스 : 자료형
    • 객체 : 변수

exam)

class Car:
  def __init__(self): # 생성자
    self.size = 11

  def forward(self): # 함수
    pass


클래스 생성자 호출

  • 클래스의 생성자 호출 시 내부적으로 두 개의 메서드 호출
    • __new__() : 클래스의 인스턴스 생성(클래스 메서드)
    • __init__() : 인스턴스 변수의 초기화(인스턴스 메서드)
  • Magic Method 혹은 Special Method라 불림.


클래스 속성 / 인스턴스 속성

  • 클래스 속성
    • 데이터 속성을 초기화 메소드(__init__())가 아닌 클래스에 직접 정의한다면 객체가 정의되기 이전에 존재.
    • 해당 클래스의 모든 인스턴스가 공유.
class Car:
  text_list = [] # 클래스 멤버(인스턴스가 공유하는 멤버로 사용됨)

  def add(self, text):    # 인스턴스 멤버
    self.text_list.append(text)

  def print_list(self):   # 인스턴스 멤버
    print(self.text_list)

위에 코드를 보면 text_list가 클래스 속성인것을 볼수 있다.

  • 인스턴스 속성
    • 인스턴스와 같은 시점에 정의되는 데이터 속성
    • 데이터 속성 정의는 __init__() 메서드 이용.
class Car:
  def __init__(self):
    self.text_list = []

  def add(self, text):    # 인스턴스 멤버
    self.text_list.append(text)

  def print_list(self):   # 인스턴스 멤버
    print(self.text_list)

위의 코드를 보면 __init__을 볼수 있는데 이것은 생성자이다.
a = Car()을 하게되면 __init__이 실행되는 것을 알수 있다.


클래스 메서드에 사용되는 self

  • 메소드가 소속되어 있는 객체 자체 의미.
  • 클래스 외부에서는 변수명으로 객체를 다룰 수 있지만 내부에서는 객체를 지칭할 이름이 없으므로 self를 사용.
  • java의 객체 자신을 가리키는 this와 같다.


정적 메서드(Static Method)

  • 클래스를 통해 호출 가능한 메서드
  • @staticmethod 데코레이터로 수식.
  • self 매개변수 없이 정의(self 매개변수를 전달받을 방법이 없음)
  • 정의 형식
    • class 클래스이름: @staticmethod def 메서드이름(매개변수): pass
class Calculator:
  @staticmethod # static 메서드
  def plus(a, b): # self 키워드 필요 없음
    return a + b

if __name__ == '__main__':
  print('{0} + {1} = {2}'.format(7, 4, Calculator.plus(7, 4)))

위의 코드를 보면 생성하지 않고 메소드를 불러낼수 있는 것을 볼 수 있다.

Private Member

  • 클래스의 안에서만 접근이 가능한 멤버
  • 작명법(Naming)으로 private/public 멤버 구분
  • private 멤버의 명명 규칙
    • 두 개의 밑줄 __ 이 접두사여야 함. 예) __number
    • 접미사는 밑줄이 한 개까지만 허용 예) __number_
    • 접미사의 밑줄이 두 개 이상이면 public 멤버로 간주함. 예) __number__

다른 파이썬 기본문법 시리즈는

Categories:

Updated:

Leave a comment