\

Pythonのクラスにはメンバ変数のアクセス制限という概念がありません。全ての変数がpublicとして扱われます。しかし、疑似private変数を作ることができます。

class BaseClass(object):
    def __init__(self):
        self.__param = "I'm BaseClass"

このように、メンバ変数の名前の頭にアンダースコアを二つつけると、疑似的にprivate変数を作ることができます。しかし、これをクラス継承と併用しようとすると問題が生じます。

class ChildClass(BaseClass):
    def hello(self):
        print self.__param

ChildClass().hello()  # AttributeError: 'ChildClass' object has no attribute '_ChildClass__param'

このように、親クラス内のメソッドで設定した疑似private変数に、子クラスの内部からアクセスしようとすると失敗します。

解決策としては、親クラス内で一緒にゲッタを宣言しておく方法があります。

class BaseClass(object):
    def __init__(self):
        self.__param = "I'm BaseClass"

    def get_param(self):
        return self.__param

class ChildClass(BaseClass):
    def hello(self):
        print self.get_param()

print(ChildClass().hello())  # "I'm BaseClass"

このように、親クラスのプロパティにすることで、外部からの直接のセットを防ぐことができます。

以上がPythonのクラス継承とプライベート変数についての基本的な説明です。これらの概念を理解することで、より効率的なコードを書くことができます。.

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です