2

でバンキング アプリケーションを作成しPython、ここからいくつかのソース コードを読み込んでいます。 Banking Application . クラスは次のbalanceように定義されています。

class Balance(object):
    """ the balance class includes the balance operations """

    def __init__(self):
        """ instantiate the class """
        self.total = 0

    def add(self, value):
        """ add value to the total
        Args:
            value (int): numeric value
        """
        value = int(value)
        self.total += value

    def subtract(self, value):
        """ subtract value from the total
        Args:
            value (int): numeric value
        """
        value = int(value)
        self.total -= value

私の質問

残高の詳細はクラス外でアクセスしてはならないため、属性をかなり変数にする必要があるため、属性self.totalを次のように定義する必要があります。ここで私の考え方は正しいですか?self.__totalprivatepublic

4

1 に答える 1

6

要するに、Python で真に「プライベートな」クラス メンバーを持つ方法はありません。ランタイムは、Java のようにメモリ保護をサポートしていません。

2 つのアンダースコア プレフィックスは名前をマングルして、それが使用されているクラスの名前が含まれるようにします (例: に__totalなります_Balance__total) が、これは主にサブクラスが同じように見えるが異なるフィールドを参照する名前を定義できるようにするために使用されます。

_totalPython の標準的な規則は、 「プライベート」または「保護」として扱われるべきクラス メンバーに対して単一のアンダースコア プレフィックスを使用することです。 t は常に安全な仮定です…)

現代の Python コードが 2 つのアンダースコア属性を使用することは非常にまれです。

于 2016-01-10T03:24:45.527 に答える