web-dev-qa-db-ja.com

Python-クラスの保護されたメンバーへのアクセス_

いくつかの保護されたメンバーとそれらを変更するためのパブリックインターフェイスを持つクラスを考えると、保護されたメンバーに直接アクセスすることが一般的に受け入れられるのはいつですか?私はいくつかの具体的な例を念頭に置いています:

  1. ユニットテスト
  2. 他の保護された属性にアクセスする__add__や__cmp__などの内部プライベートメソッド
  3. 再帰的なデータ構造(リンクリスト内のnext._dataへのアクセスなど)

これらの属性は公開されたくないので、公開したくありません。私の構文IDE構文の強調表示は、保護されたメンバーへのアクセスが間違っていると言い続けています-誰がここにいますか?

[〜#〜] edit [〜#〜]-以下に簡単な例を追加します。

class Complex:
    def __init__(self, imaginary, base):
        self._imaginary = imaginary
        self._base = base

    def __str__(self):
        return "%fi + %f" % self._base, self._imaginary

    def __add__(self, other):
        return Complex(self._imaginary + other._imaginary, self._base + other._base)

Pycharmはother._imaginaryother._baseを次のように強調表示します:

保護されたメンバーへのアクセス_クラスの架空

9
Raven

解決済み-問題は実際には型ヒントの欠如に関係していました。以下が機能するようになりました。

class Complex:
    def __init__(self, imaginary, base):
        self._imaginary = imaginary
        self._base = base

    def __str__(self):
        return "%fi + %f" % self._base, self._imaginary

    def __add__(self, other):
        """
        :type other: Complex
        :rtype Complex:
        """
        return Complex(self._imaginary + other._imaginary, self._base + other._base)
4
Raven