2016-04-02 8 views
-2

私はクラスファイルを持っています。それを "C1.py"としましょう。サンプルコードは以下のようになります。その関数のパラメータとしてクラスを渡して、 "別のpythonファイルの関数"の "クラスのメソッド"にアクセスしてください。

私は、上記のクラスファイルにアクセスする別のpythonファイルを同じフォルダに持っています。

from trial import C1 

def getAns(class1): 
    while True: 
     ans = input("Answer: ") 
     if class1.M1(ans): 
      return ans 
      break 

sample = C1() 
print sample.greeting 
ans = getAns(sample) 
print ans 

これらのファイルを実行すると、sample.greetingが正常に印刷されます。実行が「ans = getAns(C1)」という行に到達するまで、「M1()は正確に1つの引数(2が与えられます)」というエラーを返すまではすべて正常です。

コード内で、そのメソッドを正常に呼び出せるように変更する必要がありますか?

ここで、上記のコードは私の問題を浮き彫りにする私の全プログラムの抽象化に過ぎないことにご注意ください。それは単なる上記のコードだけで馬鹿に聞こえる。だから、私にはそれを耐えてください。

+0

'デフM1(自己、ANS)M1は、静的作ることができます:'。メソッドへの最初の引数は、暗黙の自己です。 –

+0

ありがとう、@AnttiHaapala、私は質問をする前にそれを試してみましたが、同じエラーを投げてもうまくいきませんでした。だから私はここにいるのですが、今度は再び働きます。とにかく、お返事ありがとうございます。 – Penguinlay

答えて

0

M1は現在、C1のメソッドとして定義されているため、クラスのインスタンスとなる追加の自己引数を持つ必要があります。 Ie

class C1(object): 

    def __init__(self): 
     self.greeting = "Hello, world!" 

    def M1(self, ans): 
     if ans == 1 or ans == 2: 
      return True 
     else: 
      return False 

C++やJavaなどの他の言語では、自己(またはこれ)の存在は暗黙的ですが、Pythonでは明示的です。

代わりにあなたがしたいか、M1は、C1の状態にアクセスする必要がない場合は、経由@staticmethodすなわち

class C1(object): 

    def __init__(self): 
     self.greeting = "Hello, world!" 

    @staticmethod 
    def M1(ans): 
     if ans == 1 or ans == 2: 
      return True 
     else: 
      return False 
+0

ありがとう、@ロバートロンソン、私は質問をする前に、最初のものを試してみましたが、それは同じエラーをスローする動作しませんでした。だから私はここにいるのですが、今度は再び働きます。とにかく、お返事ありがとうございます。あなたが気にしないなら、あなたは@staticmethodの使い方についてちょっと説明しますか?私はそれを以前に使ったことがないし、私が平易な英語で説明をしてくれればいいだろう。一方、私はそれのためにスタックオーバーフローの他の投稿を介してサーフします。 – Penguinlay

関連する問題