はじめに
古代世界の神秘が依然として生き生きとしている時代に、幽霊の番人に守られた神秘に包まれた隠れた寺院があります。この寺院は、カプセル化の秘密を秘めており、それは Python におけるカプセル化がオブジェクトのデータの整合性を保護するのと同じように、寺院の宝を守る神秘的な力です。志高い Python 魔法使いとして、あなたの目標はこれらの秘密を解き明かし、番人の謎を解き、Python におけるカプセル化の技術を身につけて、その中に秘められた神秘的な知識を手に入れることです。
番人クラスの作成
このステップでは、幽霊の番人を表すクラスを作成することで旅を始めます。これは、Python におけるカプセル化との最初の出会いになります。この番人は、特定のメソッドを通じてのみアクセスできる秘密のメッセージを格納しており、プライベート属性の力を示しています。秘密を守るために、プライベート属性とメソッドを持つ Sentinel クラスを作成します。
では、好きなテキストエディタで ~/project/sentinel.py を開き、次のコードを追加しましょう:
class Sentinel:
def __init__(self):
self.__message = 'The key to encapsulation lies within the walls.'
def reveal_message(self):
return self.__message
guardian = Sentinel()
print(guardian.reveal_message())
このコードでは、__message は 2 つのアンダースコアで表されるプライベート属性であり、これはクラス自体の中でのみアクセス可能であることを意味します。reveal_message メソッドは、__message 属性への制御されたアクセスを提供します。
コードを実行してみましょう:
python sentinel.py
番人の秘密のメッセージが表示されるはずです:
The key to encapsulation lies within the walls.
番人を強化する
このステップでは、Sentinel クラスを強化して、正しいパスフレーズが与えられた場合にのみ秘密のメッセージを変更できるメソッドを追加します。これにより、番人のカプセル化をさらに強化し、Python クラスでデータと動作の両方をどのようにカプセル化するかを示します。
sentinel.py を以下のコードで更新します:
## sentinel.py
class Sentinel:
def __init__(self):
self.__message = 'The key to encapsulation lies within the walls.'
self.__passphrase = 'abracadabra'
def reveal_message(self):
return self.__message
def change_message(self, new_message, passphrase):
if passphrase == self.__passphrase:
self.__message = new_message
else:
print('Incorrect passphrase!')
guardian = Sentinel()
guardian.change_message('Encapsulation is powerful!', 'abracadabra')
print(guardian.reveal_message())
コードを実行すると:
python sentinel.py
正しいパスフレーズを使用した場合、メッセージが更新されていることがわかります:
Encapsulation is powerful!
まとめ
この実験では、古代の原理が Python における現代のカプセル化の概念を反映した世界に入り込みました。あなたは、プライベート属性を使って秘密を守る Sentinel クラスを作成し、公開メソッドを通じてこれらを操作する方法を学び、パスフレーズを使ってアクセス制御を強化しました。この実験の目的は、Python クラスのプライベートおよびパブリックインターフェイスを理解するための実践的なアプローチを確保し、カプセル化は詳細を隠すことだけでなく、適切な詳細を公開することにも関係があるという考えを強化することでした。
この演習を通じて、カプセル化がオブジェクト指向プログラミングの基本的な側面である理由と、Python でどのようにエレガントに達成できるかについて、より深い洞察を得ました。良いコードを書く技術は、しばしば、古代の物語の神話的な番人のように、必要なことを明らかにする一方で、コアロジックを保護するファサードを作成することに関係しています。



