重複の可能性:
Pythonの「自己」の説明
私はプログラミングとPythonの初心者です。self
クラスメソッドでの使用とクラス変数の宣言は理解していますが、私の質問はself
、クラスメソッドの外部で変数を宣言するために使用されないのはなぜですか?」用語がわからないため、この質問が別の投稿ですでに回答されている場合はお詫びします。
重複の可能性:
Pythonの「自己」の説明
私はプログラミングとPythonの初心者です。self
クラスメソッドでの使用とクラス変数の宣言は理解していますが、私の質問はself
、クラスメソッドの外部で変数を宣言するために使用されないのはなぜですか?」用語がわからないため、この質問が別の投稿ですでに回答されている場合はお詫びします。
self
どこでも変数を宣言するために使用されていません。self
メソッドは、すべての呼び出しの最初のパラメーターとしてバインドされているインスタンスを受け取るため、メソッドの最初のパラメーターの通常の名前です。
callable がバインドされるインスタンスがあるコンテキストでのみ適用されるため、「他の場所」では使用されません。
あなたはおそらく次のようなことを考えているでしょう:
class Foo(object):
y = 1
x = self.y * 2
self
実際、クラス ステートメントの本体が評価される時点では、インスタンスまたはクラス オブジェクトはまだ存在していません。を使用せずに本体のスコープ内の他の変数を直接参照できるため、これも必要ありませんself
。
self のメンバーへの代入と、クラス スコープ内の変数への代入は、2 つの異なることを行うことに注意してください。
class Foo(object):
y = 1 # class variable
def __init__(self):
self.x = self.y * 2 # instance variable, defined by reference to class variable
first = Foo()
Foo.y = 2
first.y = 3
second = Foo()
print first.x # = 2
print second.x # = 4
selfは規約であり、Python の予約語ではありません。通常のメソッド宣言の最初の引数は、オブジェクトを表します。それにもかかわらず、コードの可読性と一貫性のために、クラス外でselfを使用しないことが一般的な知恵です。
一般に、変数識別子として任意の単語を使用できますが、変数名は暗黙的にコード ドキュメントの一部であるため、5 つに絞り込める限り自明な名前を使用することをお勧めします。 -12 個のシンボル (これは私の好みです) - もっと長いかもしれませんが、名前が長すぎるとコードが乱雑になります。
クラス外のselfは無意味です。コード リーダーがコードを理解するのに役立ちません。したがって、必要に応じて使用できますが、それは良い考えではありません。
このリンク ( http://www.python.org/doc/essays/ppt/acm-ws/sld051.htm ) は、クラス変数とインスタンス変数について明確にすることができます。そのページと対応する次のスライドを見てください。
それがあなたが求めていることを明確にしない場合、クラスメソッドに関しては、あなたが何を指しているのか知っているかどうかわかりません. 「クラスメソッド」( http://docs.python.org/2/library/functions.html#classmethod)と「静的メソッド」( http://docs.python.org/2 )について読むことをお勧めします/library/functions.html#staticmethod )