Python中@propertyの使い方詳細
結合属性の場合、直接に属性をオブジェクトに割り当てます。
17
20
35
balala:35
表面的には、外部コードが“成功”に設定されています。age変数17は、実はこれです。age変数とクラス内部の_age変数は変数ではありません。
内部の_age変数はPython解釈器によって自動的に変更されました。Person_外部コードはpに_を追加しました。変数だからget_を呼び出しますage_fun出力は初期値20です。
そしてset_age_funはclass内部でage変数値を変更したので、最終的にbala:35を出力します。
私たちはもう少し調整します。
(変数名は一つしか変更されていません。元のプライベート属性です。age単下線は:_メッセージは、「age」と定義することもできる。
下線で始まる変数名の例を説明します。たとえば、_このような例示的変数は外部からアクセスできますが、約俗的に規定されています。このような変数を見ると、「訪問できますが、プライベート変数と見なして、勝手にアクセスしないでください。」という意味です。
1 17
2 17
3 35
4 balalala:35
ビューのプライベートと全体の設定
しかし、上記の呼び方はやや複雑ではないかと思いますが、直接属性を使うということはないです。
類似の属性のような簡単な方法でクラスにアクセスできる変数がありますか?必要な方法
まず、ちょっと改造した例を見てみます。(後でPython内蔵の@property装飾器を使って、一つの方法を属性呼出しに変えます。)
本題に入ります。@propertyのいいところを見てください。
17
20
35
balala:35
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
p = Person()
p.name= 'Mary'
まず詳細な例を見ます。
class Person(object):
def __init__(self, name, age):
self.__name = name
self.__age = age
def get_age_fun(self):
return self.__age
def set_age_fun(self, value):
if not isinstance(value, int):
raise ValueError(' !')
if value < 0 or value > 100:
raise ValueError(' 0-100')
self.__age = value
def print_info(self):
print('%s: %s' % (self.__name, self.__age))
p = Person('balala',20)
p.__age = 17
print(p.__age) # 17
print(p.get_age_fun()) # 20 , “ ” __age 17, __age class __age !
# __age Python _Person_age, p __age 。 get_age_fun
p.set_age_fun(35)
print(p.get_age_fun()) # 35
print(p.print_info()) # balala: 35
出力:17
20
35
balala:35
表面的には、外部コードが“成功”に設定されています。age変数17は、実はこれです。age変数とクラス内部の_age変数は変数ではありません。
内部の_age変数はPython解釈器によって自動的に変更されました。Person_外部コードはpに_を追加しました。変数だからget_を呼び出しますage_fun出力は初期値20です。
そしてset_age_funはclass内部でage変数値を変更したので、最終的にbala:35を出力します。
私たちはもう少し調整します。
(変数名は一つしか変更されていません。元のプライベート属性です。age単下線は:_メッセージは、「age」と定義することもできる。
下線で始まる変数名の例を説明します。たとえば、_このような例示的変数は外部からアクセスできますが、約俗的に規定されています。このような変数を見ると、「訪問できますが、プライベート変数と見なして、勝手にアクセスしないでください。」という意味です。
class Person(object):
def __init__(self, name, age):
self.__name = name
self._age = age
def get_age_fun(self):
return self._age
def set_age_fun(self, value):
if not isinstance(value, int):
raise ValueError(' !')
if value < 0 or value > 100:
raise ValueError(' 0-100')
self._age = value
def print_info(self):
print('%s: %s' % (self.__name, self._age))
p = Person('balala',20)
p._age = 17
print(p._age) # 17
print(p.get_age_fun()) # 17 20, _age ,
p.set_age_fun(35)
print(p.get_age_fun()) # 35
print(p.print_info()) # balala: 35
出力:1 17
2 17
3 35
4 balalala:35
ビューのプライベートと全体の設定
しかし、上記の呼び方はやや複雑ではないかと思いますが、直接属性を使うということはないです。
類似の属性のような簡単な方法でクラスにアクセスできる変数がありますか?必要な方法
まず、ちょっと改造した例を見てみます。(後でPython内蔵の@property装飾器を使って、一つの方法を属性呼出しに変えます。)
本題に入ります。@propertyのいいところを見てください。
class Person(object):
def __init__(self, name, age):
self.__name = name
self.__age = age
@property
def get_age_fun(self):
return self.__age
@get_age_fun.setter # get_age_fun
def set_age_fun(self, value):
if not isinstance(value, int):
raise ValueError(' !')
if value < 0 or value > 100:
raise ValueError(' 0-100')
self.__age = value
def print_info(self):
print('%s: %s' % (self.__name, self.__age))
p = Person('balala',20)
p.__age = 17
print(p.__age) # 17
print(p.get_age_fun) # 20 ()
#p.set_age_fun(35)
p.set_age_fun = 35 # set_age_fun ()
print(p.get_age_fun) # 35
print(p.print_info()) # balala: 35
出力:17
20
35
balala:35
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。