2017-01-26 3 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、 'ダメージを')()' [MCVE]を教えてください – jonrsharpe

+0

まず、スクリーンショットの代わりに、質問。第二に、あなたの関数は 'class.function'にしています。 '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パラメータの代わりに敵の名前が来るでしょう、カードは敵に何かをする方法です)このようにして、このメソッドはオブジェクトに対して呼び出されます。

たとえば、敵の名前(オブジェクト)は:Tom、カード名(メソッド)はダメージです 関数を呼び出すと、パラメータは、そう: use_card(トム、 "ダメージ")は、関数の中でこの処理が行われます。!?tom.damageすごい

+0

'use_card(Tom、" damage ")'が動作するためには、 'Tom'はPythonオブジェクトを含む_variable_という名前でなければなりません。同じオブジェクトは 'Dick'、' foobar'などの名前を持つものでも、 'enemies [3] 'のようなリストの単一の要素を含むものでもかまいません。私は、変数の名前とそのオブジェクトが参照するオブジェクトの内容との間に混乱があると思っています。変数に与えられた名前に関連することが多い(しかしそうでないかもしれない)名前の文字列かもしれません。例えば、 'company'という名前の変数は' 'Google ''を含む文字列に割り当てられます。 – martineau

関連する問題