객체를 표현하기 위한 문법.
프로그래밍으로 객체를 만들 때 사용하는 것.
인스턴스(instance)
= 객체(object)
복잡한 문제를 잘게 나누어 객체로 만들고, 객체를 조합해서 문제를 해결
현실 세계의 복잡한 문제를 처리하는데 유용
기능을 개선하고 발전시킬 때도 해당 클래스만 수정하면 되므로 유지 보수에도 효율적
class 클래스이름:
def 메서드(self):
코드
# 인스턴스 메서드 = 인스턴스를 통해 호출하는 메서드
인스턴스 = 클래스()
인스턴스.메서드()
# 특정 클래스의 인스턴스인지 확인하기
isinstance(인스턴스, 클래스)
self
: 인스턴스 자기 자신을 의미함
class 클래스이름:
def __init__(self):
self.속성 = 값
class 클래스이름:
def __init__(self, 매개변수1, 매개변수2):
self.속성1 = 매개변수1
self.속성2 = 매개변수2
# __init__(initialize) 메서드는 인스턴스를 만들 때 호출되는 특별한 메서드
# 클래스 안에서 속성에 접근할 때: self.속성
# 클래스 외부에서 속성에 접근할 때: 인스턴스.속성
# 인스턴스에 속성 추가하기
인스턴스.속성 = 값
# 이렇게 추가한 속성은 해당 인스턴스에만 생성
# 클래스로 다른 인스턴스를 만들었을 때는 추가한 속성이 생성되지 않음
비공개 속성은 클래스 안의 메서드에서만 접근 가능함.
비공개 속성은 클래스 바깥으로 드러내고 싶지 않은 값에 사용.
공개 속성(public attribute)
: 클래스 바깥에서 접근할 수 있는 속성
비공개 속성(private attribute)
: 클래스 안에서만 접근할 수 있는 속성
# __속성 과 같이 __(언더바 2개)로 시작
class 클래스이름:
def __init__(self, 매개변수)
self.__속성 = 값
물려받은 기능을 유지한채로 다른 기능을 추가할 때 사용하는 기능.
기존 기능을 재사용할 수 있어서 효율적.
기반 클래스(base class)
파생 클래스(derived class)
클래스 상속은 기반 클래스의 기능을 유지하면서 새로운 기능을 추가할 수 있다.
연관되면서 동등한 기능일 때 사용한다.
# 클래스 상속 구조
class 기반클래스 이름:
코드
class 파생클래스 이름(기반클래스 이름):
코드
# 상속관계 확인
issubclass(파생 클래스, 기반 클래스)
is-a
관계: 상속관계(A is a B).
상속은 명확하게 같은 종류이며 동등한 관계일 때 사용
has-a
관계: 포함관계(A has a B).
상속을 사용하지 않고 속성에 인스턴스를 넣어서 관리.
기반 클래스의
__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).메서드
남재윤, 『파이썬 코딩 도장』, 길벗