クラスにおけるプライベート変数
Pythonのクラスを使うと、関連するデータや関数をまとめてカプセル化し、コードを整理できます。場合によっては、クラスの外部から変数を使われたくないことがあります。Pythonでは、プライベート変数をクラス内で定義して、コードのユーザーがそれらの変数にアクセスできないようにすることができます。プライベート変数は、変数名の先頭にアンダースコアを2つ(__)付けて定義します。パブリック変数はクラスの外部から直接アクセスできますが、プライベート変数はそうではありません。例を見てみましょう:
class PublicPrivateExample:
def __init__(self):
self.public_var = 'I am public!' # パブリック変数
self.__private_var = 'I am private!' # プライベート変数
example = PublicPrivateExample()
print(example.public_var) # 'I am public!'
print(example.__private_var) # AttributeErrorが発生この場合、パブリック変数は簡単にアクセスできます。しかし、プライベート変数にアクセスしようとすると、PythonはAttributeErrorを発生させます。
Pythonには、JavaやC++のような厳密なプライベートメンバーはありません。Pythonでは、プライベートメンバーは直接アクセスしないようにという慣習です。Pythonはネームマングリングを使用して、プライベート変数に誤ってアクセス・変更する可能性を低くしています。しかし、必要であればアクセスすることもできますが、一般的には避けるべきです:
print(example._PublicPrivateExample__private_var) # I am private!プライベート変数へのアクセスは、_クラス名__変数名を使って行います。これにより、直接のアクセスを控え、カプセル化を促進します。プライベート変数にアクセスする必要がある場合は、パブリックなメソッドを提供すると良いでしょう:
class PublicPrivateExample:
def __init__(self):
self.__private_var = 'I am private!'
def get_private_var(self): # プライベート変数へのゲッターメソッド
return self.__private_var # クラス内ではプライベート変数にアクセス可能
example = PublicPrivateExample()
print(example.get_private_var()) # 'I am private!'を出力ここでは、パブリックなメソッドget_private_varを使って、プライベート変数への制御されたアクセス方法を提供しています。これにより、データのカプセル化と整合性を維持できます。
チャレンジ:データベースクラス
あなたは、name: valueのペアを保存するPythonのDatabaseクラスを開発するよう求められています。このデータベースは、Databaseクラス内のプライベートな辞書として表現されるべきです。
Databaseクラスは以下のメソッドを持つ必要があります:
insert(name, value): このメソッドは、新しいname: valueペアをデータベースに挿入します。もしnameがすでにデータベースに存在する場合、Name already exists in the database.というメッセージを表示します。delete(name): このメソッドは、既存のname: valueペアをデータベースから削除します。もしnameが存在しない場合、Name does not exist in the database.というメッセージを表示します。update(name, value): このメソッドは、データベース内の既存のnameのvalueを更新します。もしnameが存在しない場合、Name does not exist in the database.というメッセージを表示します。display(): このメソッドは、データベース内のすべてのname: valueペアをname: valueの形式で表示します。すべての値はカンマとスペース(,)で区切ります。
入力 | 出力 |
| Bob: 24, Alice: 25 |
Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB