りある
まんぐりんぐ?
外部からのアクセスを制御するための仕組みデス。
目次
マングリング(Name Mangling)
マングリング(難号化)はクラス内の属性やメソッドの名前を変更して外部からのアクセスを制御するための仕組みです。
名前の衝突を防ぎ、クラス内での使用を意図したもので、厳格なプライバシーを提供するものではありません。
Pythonの公式ドキュメント:
Python では、データ隠蔽を補強するための機構はなにもありません
https://docs.python.org/ja/3/tutorial/classes.html#class-attributes:~:text=Python%20%E3%81%A7%E3%81%AF%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%E9%9A%A0%E8%94%BD%E3%82%92%E8%A3%9C%E5%BC%B7%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%A9%9F%E6%A7%8B%E3%81%AF%E3%81%AA%E3%81%AB%E3%82%82%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93
マングリングの使いかた
アンダースコア2つ(__)で始まる変数名は、マングリングされた変数名として扱われます。
__private_name
マングリングされた変数名は、クラス内部でのみ使用されます。
クラス外部からアクセスしようとすると、AttributeErrorが発生します。
マングリングの例
マングリングは、クラスの内部でのみ使用されるべき変数を隠蔽するために使用されます。
たとえば、以下のようなクラスがあるとします。
class MyClass:
__private_variable = 1
def __init__(self):
self.__private_variable = 2
def __private_function(self):
print("This is a private function")
my_class = MyClass()
print(my_class.__private_variable) # AttributeErrorが出ます。
my_class.__private_function() # AttributeErrorが出ます。
このクラスでは、__private_variable
と__private_function
は、マングリングされた変数名です。
そのため、クラス外部からアクセスすることはできません。
ただし、マングリングは完全なセキュリティ対策ではありません。
Pythonのカプセル化 | 関西AIラボ
カプセル化 カプセル化(Encapsulation)とは、オブジェクトの内部を外部から隠蔽し、オブジェクトの状態を保護する仕組みです。 わけわからんひとに、プログラムの中身を…