0

親子クラスがあります。親クラスには2つの属性x、yがあります。Yは__(二重アンダースコア)でプライベート変数に設定できますが、子クラスに公開できないため、子クラスに公開する_(単一アンダースコア)として指定しました。

しかし、私はそれが子クラス以外に公開されることを望んでいません。

公開されているy変数を保護するために、子メソッドのinitクラスをオーバーライドする方法はありますか?

test.py

class parent:

    def __init__(self,x):
        self.x = x
        self._y =   ' '
        self.setyvalue()

    def setyvalue(self):
        self._y = 10
        return self._y 
class child(parent):
    def test(self):
        print('self.x',self.x)
        print('self._y',self._y)

if __name__ == '__main__':
    x = child(2)
    x.test()
4

2 に答える 2

2

いいえ。Pythonは属性を実際に隠す方法を提供していません。不適切なアクセスを阻止するための規則を提供するだけです。単一のアンダースコアを使用することは、それをプライベートとしてマークし、その変数を使用すると災害のリスクがあることをユーザーに警告する規則です。

二重アンダースコアの「非表示」でさえ、それほど強力なセキュリティではないことに注意してください。クラスFooに属性がある場合__blahでも、外部からはとしてアクセスできます_Foo__blah。繰り返しになりますが、これは外部からのアクセスを思いとどまらせるだけの慣習ですが、それを妨げるものではありません。

于 2012-10-06T20:13:40.727 に答える
0

慣例により、アンダースコアで始まる変数は「プライベート」と見なされ、クラス外で使用しないでください。Pythonはそれを防ぎませんが、尊重されるべきのは慣習です。これはPythonで行う方法です。すべてが許可されますが、使用方法を文書化します。

于 2012-10-06T20:14:20.263 に答える