2

親クラスと子クラスがあり、子クラスをインスタンス化して親クラスのプロパティを継承しようとしています。

このコードは完全に機能しますが、self.list1をプライベートに保つ方法があるかどうかを知りたいです。self .__ list1を宣言すると、子クラスからはアクセスできなくなります。

self .__ list1をプライベートとして保持するために、childclassメソッドをオーバーライドできますか?

class parent(object):
    def __init__(self,x,y):
        self.x = x
        self.y = y
        self.list1 = ['a','b','c']
        print('self.x',self.x)
        print('self.y',self.y)

class child(parent):
    def test(self):
        print('In child self.x',self.x)
        print('In child self.list1',self.list1)

class test(object):
    def __init__(self,x1,y1):
        self.x1 = x1
        self.y1 = y1

    def process(self):
        childobj = child(self.x1,self.y1)
        childobj.test()

        pass


def main():            
    testx = test(2,3)
    testx.process()
4

1 に答える 1

5

ドキュメントから:

オブジェクトの内部以外からアクセスできない「プライベート」インスタンス変数は、Pythonには存在しません。ただし、ほとんどのPythonコードには規則があります。アンダースコアが前に付いた名前(例:_spam)は、APIの非公開部分として扱われる必要があります(関数、メソッド、データメンバーのいずれであっても) 。これは実装の詳細と見なされ、予告なしに変更される場合があります。

2つのアンダースコアを前に付けると、名前マングリングが呼び出されます。これらの変数/メソッドの「プライベート性」を尊重するのはクライアントの責任です。

于 2012-10-03T16:14:55.150 に答える