プロパティーを使った属性の設定
class TeslaCar(Car)のenable_auto_runの属性を後から書き換えることが可能
qiita.py
class Car(object):
def __init__(self,model=None):
#ベースクラスは何も設定しない
self.model = model
def run(self):
print("run")
class ToyotaCar(Car):
def run(self):
print("toyta_run")
class TeslaCar(Car):
def __init__(self, model= "ModelS", enable_auto_run=False):
super().__init__(model)
self.enable_auto_run=enable_auto_run
def run(self):
print("tesla_run")
tesla_car = TeslaCar("modelS")
print(tesla_car.enable_auto_run)
tesla_car.enable_auto_run = True
print(tesla_car.enable_auto_run)
外から書き換えられたくないとき
pythonでは_は『外から見えないようにする』という意味がある
qiita.py
self._enable_auto_run
qiita.py
class TeslaCar(Car):
def __init__(self, model= "ModelS", enable_auto_run=False):
super().__init__(model)
self._enable_auto_run=enable_auto_run
@property
def enable_auto_run(self):
return self._enable_auto_run
このように書き換えることで読み込みはできるが書き込みはできなくなる
この状態で書き換えようとすると
再度書き換えを可能にするには次のファンクションを追加する必要がある
qiita.py
@enable_auto_run.setter
def enable_auto_run(self, is_enable):
self._enable_auto_run = is_enable
この後、次のように書くと引数にTrueが入る
qiita.py
tesla_car.enable_auto_run = True
使い所
外からの書き換えの制限をかける時など
qiita.py
class TeslaCar(Car):
def __init__(self, model= "ModelS", enable_auto_run=False,passwd =456):
super().__init__(model)
self._enable_auto_run=enable_auto_run
self.passwd = passwd
@property
def enable_auto_run(self):
return self._enable_auto_run
@enable_auto_run.setter
def enable_auto_run(self, is_enable):
if self.passwd == 456:
#パスワードが456のときのみ外からの書き換えを可能
self._enable_auto_run = is_enable
else:raise ValueError
#それ以外はエラー
さらに進んで
アンダースコアを二つ繋げると、生成後はアクセスできなくなる
qiita.py
self.__enable_auto_run=enable_auto_run
注意点
存在しない属性を付け加えることができる為、付け加える前にクラスの中身を確認する必要がある
qiita.py
class T(object):
pass
t=T()
#インスタンス化
t.name = "kirin"
t.age = 20
print(t.name,t.age)
#kirin,20
Author And Source
この問題について(プロパティーを使った属性の設定), 我々は、より多くの情報をここで見つけました https://qiita.com/kirinboy96/items/d25c646322a4321d4df6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .