2016-05-18 6 views
1

メソッドの戻り値を変数に代入しようとしましたが、このエラーが発生しました。が見つかりません1必要な位置引数:メソッドに変数を代入するときに 'self'

class MyClass(): 

    def my_def(self): 
     return "Hello" 

    my_variable = my_def() 

これは、私がやりたいことと同等のJavaです。

public class NewException { 
    public int method1(){ 

     return 1; 
    } 
    public int variable = method1(); 
} 

私はこれが何か単純だと確信していますが、私はこの言葉に正しい言葉を見つけることさえできませんでした。どんな助けもありがとうございます。

+0

問題の本文にエラー全体を入れるとよいでしょう。 –

+5

これは 'MyClass'にクラス属性を設定します。私はこれがあなたがしたいことではないと確信しています。そのコードの文脈を説明してください。そうすれば、正しい方法でアドバイスすることができます。 –

+1

また、私の目を傷つけるメソッド名のPEP8、camelCaseを見てください(はい、私はPEP8ナジーです)。 –

答えて

2

メソッドと関数の違いから始めることができますが、基本的にメソッドはあるオブジェクトに属し、関数はそうではありません。したがって、たとえば

def myFunction(): 
    return "F" 

class MyClass: 
    value = 0 
    def myMethod(self, value): 
     old = self.value 
     self.value = value 
     return old 

myClassInstance = MyClass() 
print myClassInstance.myMethod(3) 
# 0 
print myClassInstance.myMethod(33) 
# 3 
print myFunction() 
# F 

このメソッドはインスタンスにバインドされており、インスタンスが作成される前にメソッドを呼び出すことは意味がないことに注意してください。それを念頭に置いて、あなたの誤りはもっと理にかなっているはずです。このメソッドはインスタンスなしで呼び出すことはできません(自己)。これはメソッドの唯一の種類ではありません。たとえば、「静的メソッド」があります。静的メソッドはクラスで定義されていますが、インスタンスなしで呼び出されます。例:

class MyClass: 
    @staticmethod 
    def myStaticMethod(): 
     return "static method" 
    # Consider using an instance attribute instead of a class attribute 
    def __init__(self): 
     self.instance_attribute = MyClass.myStaticMethod() 
# Or if you need a class attribute it needs to go outside the class block 
MyClass.class_attribute = MyClass.myStaticMethod() 
+0

つまり、静的メソッドの戻り値をクラス変数に直接割り当てることはできません。 –

+1

「直接割り当てる」ことができないわけではありません。クラスオブジェクトがクラスブロックの最後まで存在しないということです。関数とは異なり、クラスブロック内でクラスオブジェクトへの再帰呼び出しを行うことはできません。したがって、 'MyClass.myStaticMethod'をクラスブロックの外で呼び出す必要があります。少し醜いことを除いて、このようにすることには欠点はありません。 –

+0

私はそれを得る、ありがとう! –

関連する問題