-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
질문이 있습니다.
20.10.29 11:31 작성 조회수 93
1
1. Flyable 클래스에 이름정보가 따로 저장이 안 되었다는 말이 무슨 의미인가요? Flyalbe의 __init__ 메소드에 name 파라미터를 넣어준다면 fly 메소드의 name 파라미터는 안 넣어도 됐을 거라는 뜻인가요?
class Flyable:
def __init__(self, name, flying_speed):
self.flying_speed = flying_speed
def fly(self, location):
print (f"{self.name} : {location} 방향으로 날아갑니다. [속도 {self.flying_speed}]")
class FlyableAttackUnit(AttackUnit, Flyable):
def __init__(self, name, hp, damage, flying_speed):
AttackUnit.__init__(self, name, hp, 0, damage) # 지상 speed = 0
Flyable.__init__(self, name, flying_speed)
def move(self, location):
print ("[공중유닛 이동]")
self.fly(location)
battlecruiser = FlyableAttackUnit("배틀크루저", 500, 25, 3)
battlecruiser1 = FlyableAttackUnit("배틀크루저", 500, 25, 3)
battlecruiser1.fly ("1시")
battlecruiser.move("9시")
한 번 수정해봤는데 큰 문제 없을까요? 이러면 배틀크루저.name은 AttackUnit과 Flyable 양쪽 2개가 생성되는 건가요?
2. 메소드 오버라이딩은 상속받은 클래스에 존재하는 같은 이름의 메소드를 대체하게 되는 건가요? 그렇다면 기존의 Unit의 move 메소드는 덮어씌우져서 쓸 수 없게 되는건가요?
답변을 작성해보세요.
1
redbean
2020.11.16
1. 아마 메모리 주소를 사용하는 것이라, 생성보다는 가르킨다는 표현이 맞을껍니다. 하지만 그런 식으로 관리하면 나중에 객체 관리가 힘들어 집니다.
2.네 아래는 간단한 예제입니다.
class ParentA:
def __init__(self , name):
self.name = name
def whois(self):
print("my name is {0} ".format(self.name))
class ChildA(ParentA):
def __init__(self , name):
self.name = name
def whois(self):
print("my parent name is {0} ".format(self.name))
parentA = ParentA("A")
parentA.whois() # my name is A
childA = ChildA("A")
childA.whois() # my parent name is A
답변 1