Pythonのマングリング

Pythonのマングリング
りある

まんぐりんぐ?

ロボ君

外部からのアクセスを制御するための仕組みデス。

目次

マングリング(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は、マングリングされた変数名です。
そのため、クラス外部からアクセスすることはできません。
ただし、マングリングは完全なセキュリティ対策ではありません。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次