先頭に 2 つのアンダースコアが付く名前
次のコードを実行したときの出力として、正しいものを1つ選べ。
class C:
def __init__(self):
self.__v = 1
print(hasattr(C(), "_C__v"), hasattr(C(), "__v"))
- A
True False - B
False True - C
True True - D
False False
正解と解説を見る
正解:A
先頭に 2 つのアンダースコアが付く属性は、サブクラスでの名前の衝突を避けるため、_クラス名__名前 に名前修飾される。アクセスの禁止ではない。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `class C:` | — |
| 2 | └ `def __init__(self):` | — |
| 3 | `print(hasattr(C(), "_C__v"), hasattr(C(), "__…` | — |
| 4 | └ `self.__v = 1`(2回) | self = C(vars={'_C__v': 1}) |
| 結果 | 実際の出力 | True False |
- A
正しい。
__vは、クラス名を付けた_C__vに名前修飾される。 - B
誤り。
__vという名前の属性はない。 - C
誤り。
__vは名前修飾されて、その名前では存在しない。 - D
誤り。
_C__vが存在する。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。