이제 개인프로젝트 제출이 거의 다가와서 오늘은 프로젝트 완성에만 몰입해서 추가과제 몇개를 제외하고는 얼추 완성했다. 그리고 합의한대로 저녁에 팀원들과 각자 개인프로젝트 진행하면서 막혔던 부분이나 진행내역을 서로 공유하면서 의견을 나누는 시간을 가졌는데, 같은 과제임에도 코드가 이렇게나 다를 수 있다는 것이 신기하게 느껴졌다. 일단 다른 사람의 코드는 물론이거니와 내가 짠 코드도 확실하게 이해하고 설명할 수가 없어서 코드를 보는 눈을 조금 키워야 될 것 같다
그리고 오늘 3번째 프로젝트를 진행하면서 가장 골치아팠던게 상속 관련인데, 강의를 들었을때나 지금이나 별로 달라진 것 없이 완벽하게 이해를 하지는 못했지만, 간략하게 내 방식대로 정의해보자면 아래 코드에서
class Unit:
def __init__(self, name, hp, speed):
self.name = name
self.hp = hp
self.speed = speed
print(f'{self.name}이 생성되었습니다.')
class Attackable_Unit(Unit):
def __init__(self, name, hp, speed, damage):
Unit.__init__(self, name, hp, speed)
self.damage = damage
print(f'{self.name}의 공격력은 {self.damage}입니다.')
marine = Attackable_Unit('마린', 60, 3, 15)
상속을 진행했는데 참고한 블로그에선 Unit.init(self, name, hp, speed)를 해서 엄마 클래스의 내용을 상속해줬는데 나는 강의에서 알려준대로 이것 대신,
class Attackable_Unit(Unit):
def __init__(self, name, hp, speed, damage):
super().__init__(name, hp, speed)
self.damage = damage
print(f'{self.name}의 hp는 {self.hp}이고, 공격력은 {self.damage}입니다.')
이런 식으로 수정된 super().__init__ 방식을 사용했고 뒤의 변수에 부모 클래스에서 지정되었던 매개변수 name, hp, speed 를 init 뒤 괄호안에 넣어줘야 한다는 사실을 깨달았다.
그리고 앞에서 부모클래스에서 매개변수 name,hp,speed가 class 생성할때 지정이 되었고 이후 self.name
즉, 인스턴스의 name 속성과 같다(self.name = name)고 지정해준 값을 제외하고 자녀클래스에서 새로 지정할 damage 값은 따로 매개변수 damage를 통해
marine = Attackable_Unit('마린', 60, 3, 15)에서의 값 15가 self.damage가 되게 해주었다.
f스트링 관련 따로 정리할 부분
x=f'{변수:-^10}'
- 가운데 정렬인데 10의 문자 길이로 공백에는 문자'-'를 채워주는 형태
- 마찬가지로 변수:< , 변수:> 로 좌우정렬이 가능하다!
클래스가 처음에 헷갈릴 수 있는데 공부하면서 점점 알아가는 재미가 있죠👍