self
これらが何に使われているのか、特に議論がわかりませんか?これを私に説明してもらえますか、そしてなぜあなたはこれを渡したいのですか?
また、私はいつも__init__
「初期化」のためだと思っていましたが、これまでここに何も入れる必要がなかったとは思いもしませんでした。誰かが私に簡単な例を教えてもらえますか?
self
編集:関数などに渡されるのを見るたびに、私はとても混乱します。
self
メソッドを呼び出しているオブジェクトです。this
Javaの場合と少し似ています。
__init__
オブジェクトを初期化するために作成されるときに、各オブジェクトで呼び出されます。これは、Javaのコンストラクターのようなものです。
したがって__init__
、オブジェクトが作成されたときに、オブジェクトの属性(Javaのメンバー変数)を設定するときはいつでも使用します。「空の」オブジェクトに満足している場合はメソッドは必要ありませんが、__init__
引数を使用してオブジェクトを作成する場合はメソッドが必要です。
例は次のとおりです。
class StackOverflowUser:
def __init__(self, name, userid, rep):
self.name = name
self.userid = userid
self.rep = rep
dave = StackOverflowUser("Dave Webb",3171,500)
次に、作成したオブジェクトを確認できます。
>>> dave.rep
500
>>> dave.name
'Dave Webb'
したがって、作成されたオブジェクトへの参照である、__init__
とともにコンストラクターに与えた引数が渡されることがわかります。self
次にself
、引数を処理してオブジェクトを適切に更新するときに使用します。
self
他の言語がPythonを必要としないのに、なぜPythonが持っているのかという疑問があります。Python FAQによると:
メソッド定義と呼び出しで「self」を明示的に使用する必要があるのはなぜですか?
まず、ローカル変数の代わりにメソッドまたはインスタンス属性を使用していることがより明白です...
次に、特定のクラスからメソッドを明示的に参照または呼び出す場合は、特別な構文は必要ありません...
最後に、たとえば変数の場合、代入に関する構文上の問題を解決します。Pythonのローカル変数は(定義上!)関数本体で値が割り当てられる(そしてグローバルとして明示的に宣言されていない)変数であるため、代入はローカル変数ではなくインスタンス変数に代入することを意図しており、構文的であることが望ましいことをインタプリタに伝えるための何らかの方法(効率上の理由から)...
慣例により、selfは、メソッドを呼び出しているオブジェクトのインスタンスです。
例えば:
class MyClass:
"""A simple example class"""
def __init__(self):
print "MyClass class created"
i = 12345
def f(self):
return self.i
# Create an object called a of type MyClass. This will print "MyClass class created"
a = MyClass()
# Run the method - should return 12345
print a.f()
# Make another instance of the class to illustrate they are separate.
b = MyClass()
# Set a.i to another value.
a.i = 1
# Note the result
print a.f()
print b.f()
ちなみに、自分で呼ぶ必要はなく、好きなように呼ぶことができます。これは常に最初のパラメーターになります。
これは、C ++/Javaの「this」パラメーターと考えてください。クラスのインスタンスを参照するために使用されます。
Class Whatever:
def __init__(self, some_parameter):
self.instance_parameter = some_parameter
__init__
クラスインスタンスコンストラクタと考えてください。