__Profile
クラスのコンストラクタで__Profile
クラスのインスタンスを作成しようとしていますが、__Profile
にアクセスできません。私はどうすればいいのですか?python - ネストされたクラスアクセス修飾子
これは私のPythonのバージョンは3.5.1
__Profile
クラスのコンストラクタで__Profile
クラスのインスタンスを作成しようとしていますが、__Profile
にアクセスできません。私はどうすればいいのですか?python - ネストされたクラスアクセス修飾子
これは私のPythonのバージョンは3.5.1
Pythonにはアクセス修飾子がありません。従来のprivate
アクセス修飾語のように__
を扱おうとすると、これが問題の1つになります。先頭の2重のアンダースコアは、__bar
の名前がclass Foo
(またはclass __Foo
、またはFoo
より前の任意の数の先頭のアンダースコア)になり、_Foo__bar
にマングルされます。
あなたが本当にそれらの主要な二重のアンダースコアを維持したい場合は、明示的に名前をマングルする必要があります自分自身:
self.profile = SlackApi._SlackApi__Team._Team__Profile()
これは、あなたがそう、完全にSlackApi
の外側から__Profile
クラスにアクセスする方法をもありますあなたは基本的にこれらのものがプライベートであるという偽善をバイパスしています。
であるあなたがそうのようにアクセスすることができ
class SlackApi:
# my work
class __Team:
class __Profile:
def get(self):
# my work
def __init__(self, slackApi):
self.slackApi = slackApi
self.profile = __Profile()
self.profile = __Team.__Profile()
self.profile = SlackApi.__Team.__Profile()
# I tried to all of these case, but I failed
# I need to keep '__Team', '__Profile' class as private class
私のコードです:
SlackApi._SlackApi__Team._Team__Profile
かそこらのような:
self._Team__Profile
しかしそれは間違っている。あなた自身の便宜のために、彼らをプライベートクラスにしないでください。
なぜネストしたクラスと '__mangled_names'を使っているのですか? * "私は' __Team'、 '__Profile'クラスをプライベートクラスとして保持する必要があります" * - なぜですか? – jonrsharpe
アクセス修飾子(またはその他の機能)をサポートしていない言語で実装しようとすると、次の2つのことが実現します.1)満足のいく結果が得られない、2)言語サポートしています。これはスキー場のようなものです。スキー場よりも悪く、サイクリングよりも悪いです。 – zvone