풀잎스쿨 | Day 7. 클래스, 상속 (fin)

yeonk·2021년 9월 15일
0

python

목록 보기
15/23
post-thumbnail

210915



1. 클래스(Class)

객체를 표현하기 위한 문법.
프로그래밍으로 객체를 만들 때 사용하는 것.

  • 클래스는 특정 개념을 표현(정의)만 할 뿐 사용을 하려면 인스턴스로 만들어야 한다는 점이 중요



인스턴스(instance) = 객체(object)






객체지향(object oriented) 프로그래밍

  • 복잡한 문제를 잘게 나누어 객체로 만들고, 객체를 조합해서 문제를 해결

  • 현실 세계의 복잡한 문제를 처리하는데 유용

  • 기능을 개선하고 발전시킬 때도 해당 클래스만 수정하면 되므로 유지 보수에도 효율적






클래스와 메서드(method)

class 클래스이름:
    def 메서드(self):
        코드
 
# 인스턴스 메서드 = 인스턴스를 통해 호출하는 메서드
인스턴스 = 클래스()
인스턴스.메서드()


# 특정 클래스의 인스턴스인지 확인하기
isinstance(인스턴스, 클래스)






속성(attribute)

self: 인스턴스 자기 자신을 의미함

class 클래스이름:
    def __init__(self):
        self.속성 =class 클래스이름:
    def __init__(self, 매개변수1, 매개변수2):
        self.속성1 = 매개변수1
        self.속성2 = 매개변수2

# __init__(initialize) 메서드는 인스턴스를 만들 때 호출되는 특별한 메서드


# 클래스 안에서 속성에 접근할 때: self.속성
# 클래스 외부에서 속성에 접근할 때: 인스턴스.속성


# 인스턴스에 속성 추가하기

인스턴스.속성 =# 이렇게 추가한 속성은 해당 인스턴스에만 생성
# 클래스로 다른 인스턴스를 만들었을 때는 추가한 속성이 생성되지 않음






비공개 속성(private attribute)

비공개 속성은 클래스 안의 메서드에서만 접근 가능함.
비공개 속성은 클래스 바깥으로 드러내고 싶지 않은 값에 사용.

공개 속성(public attribute): 클래스 바깥에서 접근할 수 있는 속성

비공개 속성(private attribute): 클래스 안에서만 접근할 수 있는 속성

# __속성 과 같이 __(언더바 2개)로 시작

class 클래스이름:
    def __init__(self, 매개변수)
        self.__속성 =






2. 클래스 상속(inheritance)

물려받은 기능을 유지한채로 다른 기능을 추가할 때 사용하는 기능.
기존 기능을 재사용할 수 있어서 효율적.

  • 기반 클래스(base class)

    • 기능을 물려주는 클래스
    • 부모 클래스(parent class), 슈퍼 클래스(superclass)
  • 파생 클래스(derived class)

    • 상속을 받아 새롭게 만드는 클래스
    • 자식 클래스(child class), 서브 클래스(subclass)



  • 클래스 상속은 기반 클래스의 기능을 유지하면서 새로운 기능을 추가할 수 있다.

  • 연관되면서 동등한 기능일 때 사용한다.



# 클래스 상속 구조
class 기반클래스 이름:
    코드
 
class 파생클래스 이름(기반클래스 이름):
    코드
    
# 상속관계 확인
issubclass(파생 클래스, 기반 클래스)






상속관계와 포함관계

is-a 관계: 상속관계(A is a B).
상속은 명확하게 같은 종류이며 동등한 관계일 때 사용

has-a 관계: 포함관계(A has a B).
상속을 사용하지 않고 속성에 인스턴스를 넣어서 관리.






Super()

기반 클래스의 __init__ 메서드를 호출.
기반 클래스 Person의 __init__ 메서드를 호출해주면 기반 클래스가 초기화되어서 속성이 만들어진다.

  • 만약 파생 클래스에서 __init__ 메서드를 생략한다면 기반 클래스의 __init__이 자동으로 호출되므로 super()는 사용하지 않아도 된다!



# 기반 클래스 작성
class Person:
    def __init__(self):
        print('Person __init__')
        self.hello = 'abc'
 
 
# 파생 클래스
class Student(Person):
    def __init__(self):
        print('Student __init__')
        super().__init__()                # super()로 기반 클래스의 __init__ 메서드 호출
        self.school = 'def'


# 명확하게 super를 사용하는 방법
super(파생클래스, self).메서드






reference

남재윤, 『파이썬 코딩 도장』, 길벗

0개의 댓글