例)Python
- 宣言は"def"で行います。
- メソッド名は全て小文字で記述し、単語の区切りにアンダースコアを使用するのが一般的なようです。
- 戻り値の定義は必要ありません。
- 第1引数は自分自身のインスタンスを示す"self"となります。
class Person:
__name = None
def get_name(self):
return self.__name
例)Java
public class Person {
private String name = null;
public String getName {
return this.name;
}
}
Javaと比較すると変数の宣言同様、戻り値の型定義をしないことに非常に違和感がありますね。この辺りがユルイというか、Javaの方が厳格だと言われる所以でしょう。
クラス直下の代入はアトリビュートの初期化ではないので注意。
返信削除インスタンス初期化時に代入すべきです。
1. class Person:
2. def __init__(self):
3. self.__name = None
4.
5. def get_name(self):
6. return self.__name
>>> class A(object):
... a = []
...
>>> x = A()
>>> y = A()
>>> x.a
[]
>>> y.a
[]
>>> x.a.append('1')
>>> x.a
['1']
>>> y.a
['1']
コメントありがとうございます。
返信削除動作を確認したところ、確かにご指摘の振舞いになりました・・・Javaでいうクラス変数のような振舞いですね。
ですが、下記のように配列ではなく単一変数(配列じゃない変数)の場合ですと、インスタンス変数として扱われました。
同じ宣言の仕方なのに、なぜ振舞いが違うのか・・・ちょっと仕様の意図が理解できません。。。
class Person:
name = None
x = Person()
y = Person()
x.name = "hoge"
print x.name
print y.name
>> hoge
>> None