技術的には、Python では属性が非公開になることはないため、get/set メソッドは「pythonic」とは見なされません。これは、オブジェクト属性にアクセスする標準的な方法です:
class MyClass():
def __init__(self):
self.my_attr = 3
obj1 = MyClass()
print obj1.my_attr #will print 3
obj1.my_attr = 7
print obj1.my_attr #will print 7
__
もちろん、引き続き getter と setter を使用することもできます。また、属性の先頭に追加することで、プライベート メンバーをエミュレートすることもできます。
class MyClass():
def __init__(self):
self.__my_attr = 3
def set_my_attr(self,val):
self.__my_attr = val
def get_my_attr(self):
return self.__my_attr
obj1 = MyClass()
print obj1.get_my_attr() #will print 3
obj1.set_my_attr(7)
print obj1.get_my_attr() #will print 7
変数名を「マングル」します。定義されて__
いるクラスの外側から、次のように名前が変更されます。上記の例では、ゲッターとセッターを使用する代わりに、単純に を使用できます。そのため、属性の外部使用を思いとどまらせますが、Java修飾子のように禁止するわけではありません。classname
__attr
__attr
_classname__attr
obj1._MyClass__my_attr
__
private
質問で述べたように、Python で使用できるプロパティもあります。プロパティの利点は、クラスの外部から通常のメンバー属性として簡単にアクセスできるように見える値を返すか設定する関数を実装するために使用できることです。