TIL.15 클래스

Haiin·2020년 11월 13일
0


클래스

  • 클래스객체를 표현하기 위한 문법이다.
    class 클래스이름:
        def 메서드(self):
            코드
  • 클래스 이름은 대문자로 시작하고 메서드는 함수작성 방법과 같다.
  • 클래스는 특정개념을 표현만 할뿐이기 때문에 사용하기 위해서는 괄호()를 붙인뒤 변수에 할당하여 사용하고, 그 변수를 클래스의 인스턴스라고 한다.
    인스턴스 = 클래스이름()
  • 클래스의 속성(attribute)데이터라고 생각하면 메서드(method)기능이라고 생각하면 된다.


인스턴스 메서드

  • 메서드는 클래스가 아니라 인스턴스를 통해 호출한다.
    인스턴스.메서드()


인스턴스 속성

  • __init__ 메서드는 인스턴스를 만들 때 호출되는 특별한 메서드. 즉, __init__(initialize)이라는 이름 그대로 인스턴스(객체)를 초기화한다.
  • 특히 이렇게 앞 뒤로 __(밑줄 두 개)가 붙은 메서드는 파이썬이 자동으로 호출해주는 메서드인데 스페셜 메서드(special method) 또는 매직 메서드(magic method)라고 부른다.
    class 클래스이름:
        def __init__(self):
            self.속성 =
  • 인스턴스만들 때 값 받기. 아래와 같이 매개변수들을 속성에 만들어주고 호출할 때는 인스턴스를 만들어 줄때 매개변수를 넣어줘서 만들면 이것을 인스턴스만들때 값을 받는다고 말한다.
    class 클래스이름:
        def __init__(self, 매개변수1, 매개변수2):
            self.속성1 = 매개변수1
            self.속성2 = 매개변수2
  • 속성에는 클래스 바깥에서는 접근할 수 없고 클래스 안에서만 사용할 수 있는 비공개 속성(private attribute)이 있는데 이는, 클래스 안의 메서드에서만 접근할 수 있다는 뜻이다.
    class 클래스이름:
        def __init__(self, 매개변수)
            self.__속성 =


클래스 속성

  • 속성에는 인스턴스 속성과 달리 클래스에 바로 속성을 만드는 방법도 있는데 이 경우, 클래스로 다른 인스턴스들을 만들고 각각의 속성을 만들어줘도 속성은 공유한다는 특징이 있다.
    class 클래스이름:
        속성 =
  • 비공개 클래스 속성은 비공개 인스턴스 속성과 같은 특징을 가진다.
    class 클래스이름:
        __속성 =# 비공개 클래스 속성


정적 메서드, 클래스 메서드

  • 인스턴스를 통하지 않고 클래스에서 바로 호출할 수 있는 정적 메서드클래스 메서드가 있다.
  • 정적 메서드는 메서드 위에 @staticmethod를 붙입니다. 이때 정적 메서드는 매개변수에 self를 지정하지 않는다.
    class 클래스이름:
        @staticmethod
        def 메서드(매개변수1, 매개변수2):
            코드
    클래스이름.메서드(    # 클래스에서 바로 메서드 호출
  • 클래스 메서드는 메서드 위에 @classmethod를 붙인다. 이때 클래스 메서드는 첫 번째 매개변수에 cls를 지정해야 한다.
    class 클래스이름:
        @classmethod
        def 메서드(cls, 매개변수1, 매개변수2):
            코드


클래스 상속

  • 클래스 상속(inheritance)은 같은 클래스를 기반으로 여러 변형이 필요한 상황에서 생성하며, 새로운 기능을 추가하여 만든다. 이는 기반 클래스와 연관되면서 동등한 기능일때 사용한다.
  • 상속클래스를 만들 때 ( )(괄호)를 붙이고 안에 기반 클래스 이름을 넣는다.
    class 기반클래스이름:
        코드 
    class 파생클래스이름(기반클래스이름):
        코드


메서드 오버라이딩

  • 파생 클래스에서 기반 클래스의 메서드를 새로 정의하는 메서드 오버라이딩
  • 클래스 상속에서 어떤 기능이 같은 메서드 이름으로 계속 사용되어야 할 때 메서드 오버라이딩을 활용한다.
    class Person:
        def greeting(self):
            print('Hello')
    //
    class Student(Person):
        def greeting(self):
            print('Hello super star!')
    // 
    james = Student()  # Hello
    james.greeting()  # Hello super star!

0개의 댓글