클래스
클래스는 간단하다.
현실에 있는 사물을 추상화를 통해 프로그래밍한 것이다.
즉 현실에 사람이 있다면 사람의 전체적인 특징을 변수, 함수로 만들어 함께 넣어놓은 것이다.
클래스끼리는 상속도 가능해서 상속받은 클래스의 변수와 함수를 그대로 가져다 쓸 수 있다.
이렇게 클래스화 시키면 프로그램을 계층적으로 구성을 가능하게 한다.
또한 불필요한 소스코드 작성을 줄일 수 있다는 장점을 가지고 있다.
클래스에서 변수는 멤버, 함수는 그대로 함수 또는 메서드라고 불른다.
# class 선언
class Human :
# 클래스의 생성자. 클래스라면 누구나 가지고 있는 생성자
# 생성자는 함수형태로 이름이 __init__으로 약속되어 있다.
# 또한 클래스 내부의 함수들은 매개변수로 self를 무조건 넣는다.
def __init__(self, name, age):
self.name=name # 클래스의 멤버(변수)
self.age=age # 클래스의 멤버(변수)
# 생성자가 있으면 소멸자도 있다.
# del 키워드로 이 클래스가 인스턴스한 것을 제거한다.
def __del__(self):
print('인스턴스를 소멸합니다~')
# 보통 클래스에서 setter, getter함수들이 있다.
# 이 set함수들은 클래스내부의 멤버들을 바꿀 때 쓴다.
def set_name(self, name):
self.name=name
# 이름과 나이를 print하는 함수를 만들어보자.
def print_name_age(self):
print('이분의 성함은 ',name,', 나이는 ',age)
이렇게 간단하게 클래스를 선언해봤다. 이제 프로그램 상에서 이 클래스를 불러올 수 있다.
이 불러온다는 것은 인스턴스 한다는 것이다. 이는 프로그램의 메모리상에 동적으로 할당해준다는 소리이다.
human1=Human('홍길동','28')
human1.name_age_print()
# 결과
# 이분의 성함은 홍길동, 나이는 28
human1.set_name('김갑수')
print(human1.name)
# 결과
# 김갑수
del human1
# 결과
# 인스턴스를 소멸합니다~
human1.name_age_print()
# 결과
# 오류발생 - del 키워드로 인스턴스를 소멸시켰으니깐
상속
간단하게 클래스의 선언과 인스턴스에 대해 알아봤다.
상속은 더 간단하다. 방금 선언한 클래스를 상속받는다는 것은 이 Human 클래스에 있는 멤버와 함수(=메서드)들을 그대로 가져와 쓸 수 있다는 소리이다.
즉 Human 클래스는 부모 클래스가 되고, Asian이란 클래스는 자식 클래스가 된다.
Asian클래스는 Human클래스의 멤버와 함수들을 그대로 가져다 쓸 수 있다. 또한 내가 원하는 멤버나 함수를 더 추가해도 된다.
또한 부모클래스에 있는 멤버나 함수들을 자식클래스에서 재정의해서 쓸 경우 자식클래스가 우선이 된다. 부모클래스에서도 자식클래스에서도 같은 이름의 멤버나 함수들이 있을 경우 부모클래스는 무시하고 자식클래스의 멤버나 함수가 더 우선이 된다는 소리이다. 이것을 사람들은 오버라이딩(Overriding)이라 불른다.
# 이처럼 상속을 할 때, 클래스 선언 절에 부모클래스의 이름을 넣는다.
class Asian(Human):
def __init__(self, name, age, nation):
self.name=name
self.age=age
self.nation=nation
asian1=Asian('홍길동',28,'한국')
# 자식클래스에서 부모클래스의 함수도 쓸 수 있다.
asian1.name_age_print()
# 결과
# 이분의 성함은 홍길동, 나이는 28
이렇게 간단하게 클래스와 상속에 대해 알아봤다. 이미 알고 있었던 내용이지만 요즘들어 오버라이딩, 오버로딩 둘이 너무 헷갈려져서 다시 한번 기억하도록 써본다.
'잡다한 코딩 노하우 > Python' 카테고리의 다른 글
python에서 *과 **의 의미 (0) | 2021.11.03 |
---|---|
함수 정의 in python (0) | 2021.10.26 |
colab에 CUDA OpenCV 설치하기 (0) | 2021.08.24 |
colab에서 스크립트 sh파일 실행시키기 (0) | 2021.08.24 |
마지막 데이터 짤짤이 컷하는 방법 in python (0) | 2021.08.21 |
댓글