파이썬 인스턴트를 method안에서 변수로 사용하고 싶습니다.
조회수 465회
제 질문에 답변해 주신다면 이 은혜 평생 잊지 않겠습니다. 제 질문은 요약해보자면,
인스턴스를 method안에서 변수로 사용하고싶습니다.
예를 들어,
class Marine:
def __init__(self):
self.health = 40
self.power = 15
def attack(self, unit):
unit.health -= self.power
print("{}가 공격을 받아 피가 {}가 되었습니다. ({}의 공격력 {})".format(unit, unit.health, self, self.power))
marine_1 = Marine()
marine_2 = Marine()
marine_1.attack(marine_2)
의 기대 결과값 =
marine_2가 공격을 받아 피가 25가 되었습니다. (marine_1의 공격력 15)
실제 결과값 =
<__main__.Marine object at 0x7fc5f0085d60>가 공격을 받아 피가 25가 되었습니다. (<__main__.Marine object at 0x7fc640a6f760>의 공격력 15)
marine_2를 attack method안에 변수로 사용하는 방법은 뭐가 있을까요?
-. 아규먼트를 쓰고 싶지 않습니다.
def __init__(self, name):
self.name = name
(중략)
print("{}가 공격을 받아 피가 {}가 되었습니다. ({}의 공격력 {})".format(unit.name, unit.health, self.name, self.power))
marine_2 = Marine("marine_2")
이렇게 사용하고 싶지 않고
marine_2 = Marine()에서
marine_2를 사용하고 싶습니다
-. 그러나, method를 추가하는 방법은 선호합니다.
-. dir(marine_2)에 나오는 어트리뷰트들을 모두 print(marine2.main)/ print(str(marine_2.main) 등 넣어보았는데 주소만나올뿐 "marine_2"를 반환하는 결과는 없었습니다. 혹시 Package를 사용하지 않는 방법으로 저 인스턴스를 변수로 사용하는 방법은 없을까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
소스에서의 변수명은 그냥 기호일 뿐입니다. 그 변수명은 소스를 작성하는 프로그래머에게만 의미있는 기호여야하지, 그 이름을 실제 데이터로 사용하는 것은 이상해요.
왜 이렇게 사용하고 싶지 않은지 모르겠는데,
marine_2 = Marine("marine_2")
와 같이 명시적으로 이름을 지정하여 사용하는 것이 올바른 방법이라고 생각됩니다.동적 인터프리터 언어의 특성상 변수명을 알아내는 방법이 있겠지만, 그건 너무 부자연스러운 방법입니다.
-
아래 코드 참고하세요.
- 코드
class Marine: marine_id = 0 def __init__(self): Marine.marine_id += 1 self.health = 40 self.power = 15 self.name = 'marine_' + str(Marine.marine_id) def attack(self, unit): unit.health -= self.power print("{}가 공격을 받아 피가 {}가 되었습니다. ({}의 공격력 {})".format(unit.name, unit.health, self.name, self.power)) marine_1 = Marine() marine_2 = Marine() marine_3 = Marine() marine_1.attack(marine_2) marine_3.attack(marine_2)
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력