AIFFEL Python Master 핵심정리 #04 클래스

이재준·2021년 7월 12일
0

AIFFEL Python Master

목록 보기
4/5
post-thumbnail

⭐⭐ 클래스

클래스는 객체를 표현하는 문법이다. class 클래스이름: 형식으로 클래스를 정의하고 내부에 def 를 이용해 클래스 안에 들어있는 함수인 메소드를 만든다.

class 클래스이름:        # 클래스 만들기
    def 메서드(self):    # 메서드 만들기
        기능

클래스는 인스턴스 = 클래스이름() 의 형식으로 인스턴스(객체)를 생성하고, 인스턴스.메서드() 으로 인스턴스로 메서드를 실행 할 수 있다.

여러 종류의 유닛으로 된 게임 중 하나인 스타크래프트를 예시로 클래스에 대한 예시코드를 만들어보았다.


⭐⭐⭐ 클래스 속성, 인스턴스 속성

클래스에 인스턴스 속성 을 만들 때 __init__ 메소드 안에서 self.속성 에 값을 할당한다.

class 클래스이름:
    def __init__(self):
        self.속성 =# 인스턴스 속성 만들기
 
    def 메서드(self):
        self.속성           # self 뒤에 .을 붙여서 인스턴스 속성에 접근
 
인스턴스 = 클래스()         # 인스턴스(객체) 만들기
인스턴스.속성               # 인스턴스 속성에 접근

여기서 __init__() 함수는 인스턴스를 초기화하는 함수로, 인스턴스를 만들때 자동으로 실행되는 메서드라고 생각하면 편하다.

클래스 속성 은 클래스에 바로 속성을 만든 것이고 이 값은 해당 클래스로 만든 모든 인스턴스가 값을 공유한다.

class 클래스이름:
    속성 =# 클래스 속성 만들기
 
    def 메서드(self):
        self.속성           # self 뒤에 .을 붙여서 클래스 속성에 접근
        클래스.속성         # 클래스 뒤에 .을 붙여서 클래스 속성에 접근
 
클래스.속성    # 클래스 속성에 접근

속성을 만들때 밑줄 두개(__) 로 시작하면 비공개 속성임을 뜻하고 비공개 속성은 클래스 안에서만 접근 할 수 있다. (비공개 메소드도 같은 방식임)

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

정적 메서드와 클래스 메서드는 인스턴스를 통하지 않고 클래스에서 바로 호출할 수 있는 메서드이다.

정적 메소드는 클래스 위에 @staticmethod 를 붙이며 매개변수에 self 를 지정하지 않는다. 정적 메소드는 인스턴스 속성, 인스턴스 메서드가 필요 없을 때 사용한다.

클래스 메소드는 메소드 위에 @classmethod 를 붙이며 매개변수에 cls를 지정한다. 클래스 메소드는 메소드 안에서 클래스 속성, 클래스 메소드에 접근 해야 할 때 사용한다.

⭐⭐ 클래스 상속

클래스 상속은 한 클래스의 기능을 유지한채로 다른 기능을 추가할 때 사용한다. 클래스를 만들때 괄호() 안에 기반 클래스 이름을 넣어 파생 클래스를 만들 수 있다.

class 기반클래스이름:
    코드
 
class 파생클래스이름(기반클래스이름):    # 기반 클래스를 상속받음
    코드

기반 클래스의 속성이나 메소드를 사용 할때는 앞에 super(). 을 붙여 사용한다. 또한 self(파생클래스, self) 형식으로도 사용 가능하다.

class 기반클래스이름:
    def __init__(self):
        self.속성 =class 파생클래스이름(기반클래스이름):
    def __init__(self):
        super().__init__()              # 기반 클래스의 메서드 호출
        super().속성                    # 기반 클래스의 속성에 접근
        super(파생클래스, self).속성    # super에 파생 클래스와 self를 넣는 형식

⭐ 메서드 오버라이딩

메서드 오버라이딩이란 파생 클래스에서 기반 클래스의 메서드를 새로 정의하는 것 이다.

class A:
    def hello(self):
        pass
 
class B(A):
    def hello(self):       # 메서드 오버라이딩
        super().hello()    # super()로 기반 클래스의 메서드 호출
 
obj = B()
obj.greeting()     # B의 hello 메서드가 호출됨

다중 상속

다중 상속은 여러 기반 클래스로 부터 상속을 받아서 파생 클래스로 만드는 방법이다.

profile
🏫 𝑲𝒚𝒖𝒏𝒈 𝑯𝒆𝒆 𝑼𝒏𝒊𝒗. / 👨‍🎓 𝑪𝒐𝒍𝒍𝒆𝒈𝒆 𝒐𝒇 𝑬𝒏𝒈𝒊𝒏𝒆𝒆𝒓𝒊𝒏𝒈

0개의 댓글