演習課題「アクセス制限」
右側のコードエリアには、クラス PersonalComputer とインスタンス pc が用意されています。
メンバ変数 ram にアクセス制限をかけて、クラスの外側からメンバ変数を自由に使うことができないようにしてください。
期待する出力値
プライベート変数にはアクセスできません。
演習課題「アクセス制限されたメンバ変数の取得」
右側のコードエリアには、クラス PersonalComputer
とインスタンス pc
と メンバ変数 __ram
を出力するコードが用意されています。
しかし、アクセス制限がかかっているためエラーが起きてしまします。
正しく取得できるよう修正してください。
期待する出力値
8
※有料会員になるとこの動画をご利用いただけます
詳しい説明を読む
#16:インスタンス変数のアクセス制限
このチャプターでは、インスタンス変数のアクセス制限について学習しましょう。
- プライベート変数とは、アクセス制限がかかった変数で、クラスの外側からメンバ変数を自由に使うことができない変数のこと
- 他のプログラミング言語では用意できるものが多いが、Python において完全なプライベート変数を用意することはできない
- 完全ではないが、プライベート変数のような変数を用意することはできる
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
kirishima = Person("Kirishima", 15)
kirishima.__age += 1000
print(kirishima.__age)
- この Person クラスで、変数 __age はプライベート変数のような変数
- 実際、25 行目でエラーが発生する
- Python では、名前の先頭にアンダーバーが 2 つ付いている属性は、その名前の先頭に
_クラス名
が付いたものに自動で変換される - そのため、
kirishima._Person__age
のように指定すれば、プライベート変数のような変数をクラスの外で使うことができる
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
kirishima = Person("Kirishima", 15)
kirishima._Person__age += 1000
print(kirishima._Person__age)
- ただし、クラスのなかでは変換前の変数名で使うことができる
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
def print_profile(self):
print(f"名前: {self.name}, 年齢: {self.__age}")
kirishima = Person("Kirishima", 15)
kirishima._Person__age += 1000
print(kirishima._Person__age)
kirishima.print_profile()
ログインすると採点できます
コードの実行