2017-01-26 1 views
-1

함수를 만들 때 객체와 메소드의 이름을 2 개의 매개 변수로 지정하는 방법이 있습니까? 그리고 본문에서는 함수 외부에서 수행하는 것처럼 메서드를 적용합니다 (예 : Boat2.Damage).함수 내의 메소드 활성화

예 :

class boat: 
    def __init__(self,): 
     self.hp = 100 
    def damage(self): 
     self.hp = self.hp - 50 

def use_card(name,attribute): 
    return name.attribute 

use_card(boat2, damage()) 

이 일을 어쨌든 있나요?

+1

'getattr (Boat2, '데미지')()'A [mcve]를주십시오 , 그림이 아닙니다. – jonrsharpe

+0

첫째, 스크린 샷 대신에 코드를 추가하십시오. 문제. 둘째로, 당신의 함수는 단지'class.function'을 만들고 있습니다; 클래스'클래스'와'함수'를 따로 전달하는 이유는 무엇입니까? –

+0

죄송합니다, 코드를 게시 할 것입니다. 왜 내가 그것을 별도로 전달 하는가? 왜냐하면 나는 게임을 만들고 적의 이름이 그 이름대로오고 그 다음 주어진 적과 무언가를 할 수있는 방법을 원합니다. – Skatedude

답변

0

나는 당신의 질문을 이해 모르겠지만 당신은 문자열로 이름을 포함하는 인수 제공하여 (함수 내에서) 메서드를 호출 할 수있는 방법을 보여줍니다 :

class Boat: 
    def __init__(self,): 
     self.hp = 100 
    def damage(self): 
     print('damage() called') 
     self.hp = self.hp - 50 

def use_card(obj, attrname): 
    return getattr(obj, attrname)() 

boat2 = Boat() 
use_card(boat2, "damage") # -> damage() called 

이 무엇인가요 너는하고 싶어?

+0

큰 감사합니다! 정확히 내가하려고 한 것. – Skatedude

+0

반가워요. 그것이하는 일 (어떻게 작동하는지)을 이해합니까? – martineau

0

예! 이것은 정확하게 내가하려고 한 것입니다. 함수 호출에서 매개 변수로 개체와 메서드를 수동으로 입력하면이 개체와 메서드를 함께 연결합니다.

향후 독자를 위해 내가 왜 이것을하고 싶어 했습니까? 나는 적과 카드가있는 게임을 가지고 있기 때문에. 나는 사용자에게 그가 적을 클릭 할 수있는 옵션을주고 싶었다. (적의 이름은 obj 매개 변수의 자리에 올 것이고, 카드는 적에게 무언가를하는 방법이다.) attrname 매개 변수를 호출하면 해당 메서드가 호출됩니다.

예를 들어 적 이름 (개체)은 다음과 같습니다. Tom, 카드 이름 (메서드)이 손상된 경우 함수를 호출 할 때 해당 이름을 그래서 매개 변수 : use_card은 (톰은, "손상") 기능이 상황이 발생합니다.!? 아주 멋진 tom.damage을

+0

'use_card (Tom, "damage")'가 작동하려면'Tom'이 Python 객체를 포함하는 _variable_ 프로그램의 이름이어야합니다. 동일한 객체는'Dick','foobar' 등의 이름을 가진 하나의 객체에 포함될 수 있습니다. 즉, 'enemies [3]'와 같은 목록의 단일 요소를 포함 할 수 있습니다. 그 문제는 변수의 이름과 그것이 참조하는 객체의 내용 사이에 혼란이 있다고 생각합니다. 변수의 이름과 자주 관련이있는 (또는 아닐 수도있는) 이름의 문자열이 될 수도 있습니다. 예를 들어'company'라는 이름의 변수는''Google ''을 포함하는 문자열에 할당 될 수 있습니다. – martineau