클래스 개념부터 실습까지 한번 정리해보았습니다.
기초탄탄!!
클래스와 객체 (class, object)
클래스는 붕어빵틀, 과자틀, 눈오리만들기 틀 등으로 다양하게 설명된다.
그러면 똑같은걸 찍어내는 도구인가? 라고 생각할 수 있는데, 붕어빵으로 예를 들어보면 안에 들어가는 내용물에 따라 다른 붕어빵이 될 수 있다! 초코붕어빵, 슈크림붕어빵, 팥붕어빵 등등..
클래스는 꼭 가져야하는 특징을 정의해놓은 틀이고, 객체는 그 틀 안에서 독자적으로 생겨난 것이라고 할 수 있다.
하나만 더 구체적으로 예를들어보면, 얼굴을 클래스라고 했을때 얼굴 클래스는 눈, 코, 입 , 머리카락 이렇게 정의 될 수 있다.
그리고 김태희라는 객체를 이 얼굴클래스로 만든다고 했을 때 눈은 쌍커풀이 있고 코는 오똑하고 입술은 도톰하고 머리카락은 검정색이야 라고 정의해서 만들 수 있다. 또 이 얼굴클래스로 완전 다른 객체를 만들어낼수도 있다.
기본 클래스 실습 (생성자)
class Calc:
def setdata(self, f, s):
self.f = f
self.s = s
def add(self):
return self.f + self.s
#객체만들기
a = Calc()
#객체에 값 넣어주기
a.setdata(1,2)
#객체의 함수 사용하기
print(a.add())
아주 기본적인 더하기 기능을 제공하는 계산기 클래스를 만들어보았다.
클래스에 정의된 setdata() 함수에 더하고 싶은 인자를 다르게해서 다른 계산기 객체를 만들어줄 수 있다.
그런데 ! 여기서 a.setdata(1,2) 로 인자를 주지 않고, a.add() 함수를 실행한다면 오류가 발생한다.
self.f , self.s 값이 설정되지 않았는데 이 값을 사용해서 연산을 시켰기때문이다.
이런 오류를 방지하기 위해서 클래스는 생성되면서 꼭 필요한 초기값을 세팅하도록 만들수 있다.
이걸 생성자라고하고 클래스 내에서 def __init__(self, 인자1, 인자2): 로 정의할 수 있다.
그래서 위의 코드를 아래처럼 수정하고 클래스 정의가 조금 달라졌다.
class Calc:
def __init__(self, f, s):
self.f = f
self.s = s
def add(self):
return self.f + self.s
#객체만들기 -> 이 단계에서 인자를 전달해서 초기화
a = Calc(1,2)
#객체에 값 넣어주기 -> 이 단계 삭제
# a.setdata(1,2)
#객체의 함수 사용하기
print(a.add())
상속
이렇게 만들어놓은 클래스를 복사해서 조금만 수정하거나 기능을 추가해서 편하게 재사용 할 수 있다.
원래 클래스를 수정하면 될때도 있지만, 누군가 패키지로 올려놓은걸 수정해서 써야하거나 다른 동료가 만들어놓은 코드를 원본은 놔두고 조금 수정해서사용해야하거나 할때 등 필요하다.
class MulCal(Cal):
상속 받을 클래스를 () 안에 넣어서 간단하게 클래스를 구현할 수 있다.
class MulCal(Cal):
def pow(self):
return self.f ** self.s
b = MulCal(3,3)
print(b.add()) # 6
print(b.pow()) # 27
Cal 클래스를 상속받아 MulCal 클래스를 만들었는데, 이 클래스는 Cal이 가진 함수를 모두 사용할 수 있다.
그래서 MulCal에는 add() 함수가 없음에도 사용이 가능하다.
그리고 새로운 함수를 추가해서 사용하는것도 가능하다.
아까 Cal 함수의 객체인 a는 이 pow() 함수를 사용하는건 불가능하다.
메서드 오버라이딩
클래스를 상속받아서 사용할 때 원래 정의되어 있던 함수를 다시 수정해서 사용하는것도 가능하다.
예를들어 지금 add() 함수에는 첫번째 인수와 두번째 인수 더해서 값을 리턴하는데, 만약 첫번째 인자를 두번 더하고 싶다고 해보자.
class MulCal(Cal):
def add(self):
return self.f + self.f + self.s
b = MulCal(3,4)
print(b.add()) # 7 -> 10
이렇게 같은 함수명을 수정해서 사용하는것을 메서드 오버라이딩이라고 한다.
'Today I Learned > Python & Pandas' 카테고리의 다른 글
파이썬 딕셔너리 모듈 (defaultdict, Counter) (0) | 2023.08.22 |
---|---|
(파이썬 자료형) 가변 객체 & 불변 객체 (0) | 2023.08.21 |
[Python] 리스트 슬라이싱 [ : ] List Slicing (0) | 2023.07.06 |
파이썬(Python) array, list, tuple, set 함수 및 특징 정리 (0) | 2023.06.08 |
[Python] 네이버 데이터랩 크롤링 (BeautifulSoup & Selenium) (1) | 2020.11.04 |