클래스 개념을 배웠다. 사실 어제도 인강으로 배우기는 했고, 이전에도 대애애애충 살짝 찍먹느낌으로 배운 적은 있었지만 실제로 클래스 관련 문제를 풀어본 적은 없었다. 그리고 오늘 깨달았다. 클래스는 에 대해서 아무것도 모르고 있었다는 것을. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
일단 기본적인 개념부터 정리해보자.
강아지라는 클래스가 있다. 클래스 안에는 그 클래스가 뭔지, 무슨 일을 하는지 설명하기 위한 특성을 적어준다. (이 특성은 함수 형태) 예시로 강아지가 먹고, 걷고, 자는 행동을 함수로 넣었다. 즉 강아지 클래스는 먹고, 걷고, 자는 행위(메서드, 함수)를 할 수 있다. 이런 타입을 {강아지 노아}에게 할당(부여)한다(Noa=Dog() 이 부분). 강아지 클래스를 부여받은 Noa는 Dog 클래스의 객체가 된다. (함수를 정의할 때 self는 꼭 넣어줘야하는데, self 매개변수는 그 클래스에 있는 다른 함수를 호출하기 위해 쓴다.)
class Dog:
def eat(self):
print("냠냠")
def walk(self):
print("총총")
def sleep(self):
print("쿨쿨")
Noa = Dog() # Dog 클래스의 객체를 생성하고 Noa라는 변수에 할당
Noa.eat() # 강아지 Noa에게 먹는 함수를 호출
Noa.eat() 을 하면 "냠냠"이 출력된다.
다른 클래스에서 Dog 클래스 안에 있는 함수 eat과 walk를 호출하고 싶다면, 이 self 매개변수를 쓰면 된다. Poodle이라는 자식 클래스를 만들고, 이 안에 find_food라는 함수를 만든다고 해보자. 여기서 Dog에서 썼던 walk, eat 함수를 쓰고 싶다면 self.walk, self.eat 이런 식으로 매개변수를 이용해 쓸 수 있다.
class Poodle(Dog):
def find_food(self):
self.walk() #dog에 있던 move 함수를 호출하기 위해서는 self 매개변수를 이용
print("Found food!")
self.eat()
silba = Poodle()
silba.find_food()
결과는 이렇게 나온다.
총총
Found food!
냠냠
여기서 중요한 점!! Poodle이 Dog의 자식 클래스이기 때문에 부모 클래스의 함수(메서드)를 상속받은 것이다. 그래서 Poodle에서 따로 walk()이나 eat()를 정의하지 않고, 그냥 self.walk(), self.eat()만 해도 호출해서 사용할 수 있는 것. 푸들의 객체인 silva가 자유롭게 Dog의 메서드를 쓸 수 있다.
만약 부모와 자식 클래스로 종속 관계가 없다면 어떻게 할까?
직접 Dog의 함수를 똑같이 입력하는 방법도 있겠지만, 이건 노가다니 패스! 대신 Dog 객체를 Poodle 클래스에 포함시키는 방법이 있다. (Poodle 클래스 안에 Dog 객체를 멤버 변수로 포함시키면 Dog 클래스의 메서드를 호출할 수 있다. Poodle 클래스를 생성할 때(초기화할 때 = __init__(self): 이 부분 ) self.dog = Dog()이라고 써주면 됨. self.dog은 Poodle의 속성이면서 동시에 Dog 클래스의 객체가 된 것.
class Dog:
def eat(self):
print("냠냠")
def walk(self):
print("총총")
def sleep(self):
print("쿨쿨")
class Poodle:
def __init__(self):
self.dog = Dog() # Poodle 클래스의 self.dog이라는 속성은 Dog 클래스를 부여받은 Dog 객체가 됨
def find_food(self):
self.dog.walk() # Poolde의 속성(self.dog)은 Dog 객체가 되었기 때문에 Dog의 walk 메서드를 호출할 수 있게 됨
print("Found food!")
self.dog.eat() # Dog 객체의 eat 메서드 호출
# 객체 생성
silba = Poodle()
#silba가 Dog의 메서드를 호출하려면 실바의 속성(self.dog)을 호출한 뒤에 Dog의 메서드(.eat())를 호출.
silba.dog.eat()
# Poodle 클래스의 메서드 호출
silba.find_food() # 출력: 총총
# Found food!
# 냠냠
솔직히 아직도 헷갈린다;ㅋㅋㅋ
다음 편에 문제 계속 -
'공부방 > Upstage AI Lab 4기' 카테고리의 다른 글
파이썬 클래스에서 2차 멘붕, 다시 개념 잡기... (0) | 2024.08.02 |
---|---|
7/31 학습일지 | 파이썬 클래스 연습문제 1 (0) | 2024.08.01 |
7/30 학습일지 | 파이썬 함수 쓸 때 꼭 살펴볼 것 (0) | 2024.07.31 |
파이썬 출력문 역슬래시 사용법 (0) | 2024.07.30 |
7/29 학습일지 | 파이썬 반복문 연습 * 연습 (0) | 2024.07.29 |