Python_getterとsetterメソッド
プロパティに割り当てられた場合には、使用
实例.属性=属性值
方法は、プロパティが明確に露出しており、プロパティ値の検査を制限することができない、Javaはセッターとゲッターメソッドを提供し、その後、Pythonはそれを行う方法ですか?:詳細については、を参照してくださいPythonの研究ガイド
プロパティの割り当て方法
場合は、バウンドプロパティ、しかし、あなたは簡単に結果を変えることができるというパラメータをチェックする方法を記述していないことは非常にシンプルですが、我々は、公開されたプロパティに直接行けば:
s = Student()
s.score = 9999
上記の割り当てはで、スコアの範囲を制限するために、明確に実際の状況と矛盾しているset_score()
セットスコア法、およびその後によるget_score()
に、そう、結果を得るためにset_score()
あなたがパラメータをチェックすることができます方法:
class Student(object):
def get_score(self): return self._score def set_score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between 0 ~ 100!') self._score = value
さて、学生の操作のいずれかのインスタンスの任意のスコアを設定することはできません。
>>>s = Student()
>>>s.set_score(60)
>>>s.get_score()
60
>>>s.set_score(9999)
Traceback (most recent call last):
...
ValueError: score must between 0 ~ 100!
しかし、上記のメソッド呼び出しと少しはそう簡単なプロパティを直接ではなく、複雑。
両方のパラメータをチェックして、変数は、そのような簡単な方法と同様のクラス属性にアクセスすることができます何もありませんか?完璧なPythonプログラマの追求のために、何をする必要があります!
機能に機能を追加することができますデコレータ(secorator)を覚えていますか?クラスのメソッド、デコレータとしての役割のために。Pythonの組み込み@property
プロパティは、メソッド呼び出しになるのデコレータは、責任があります:
class Student(object):
@property def score(self): return self.__score @score.setter def score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!!!') if value < 0 or value > 100: raise ValueError('score must between 0~100!!!') self.__score = score
@property
使用方法では、より複雑な、見てみましょうの実現。プロパティのゲッターメソッドになるためには、単に追加し@property
、この時点でそれを@property
順番に別のデコレータを作成した@score.setter
、setterメソッドになるために属性を割り当てるための責任があるので、我々はプロパティコントロールの動作を持っています。
>>> s = Student()
>>> s.score = 60 # OK,实际转化为s.set_score(60)
>>> s.score # OK,实际转化为s.get_score() 60 >>> s.score = 9999 Traceback (most recent call last): ... ValueError: score must between 0 ~ 100!
この魔法のことに注意してください@property
、例えば、私たちが動作しているとき、私たちが達成するために、このプロパティは、おそらく直接公開されていないことを知っているが、getterメソッドとsetterメソッドを介して。
あなただけのgetterメソッドを定義し、読み取り専用属性を定義することができ、setterメソッドを定義していないと、読み取り専用のプロパティは次のとおりです。
class Student(object):
@property def birth(self): return self._birth @birth.setter def birth(self, value): self._birth = value @property def age(self): return 2015 - self._birth
上記birth
読み書きプロパティであり、そしてage
ため、読み取り専用プロパティであるage
によるとbirth
、現在時刻を算出します。
概要
@property
広くパラメータに必要なチェックを確保しながら、プログラムが実行されているように、エラーの可能性を低減する、発信者がショートコードを記述することができ、クラスの定義に使用されます。
クラスパーソン(オブジェクト): デフ __init__ (自己、年齢): self.age = 年齢 @property defの年齢(自己): リターンself._age @ age.setter デフ年齢(自己、年齢): self._age = 年齢 @property デフ誕生(自己): リターン 2017- self._ageの P =人(20 ) >>> 印刷(p.age) >>> 印刷(p.birth) >>> = 1997 p.birth 属性エラー#の誕生不存在セッター方法
からの振替
https://www.cnblogs.com/mzc1997/p/7663052.html
https://www.cnblogs.com/miqi1992/p/8343234.html
プロパティに割り当てられた場合には、使用
实例.属性=属性值
方法は、プロパティが明確に露出しており、プロパティ値の検査を制限することができない、Javaはセッターとゲッターメソッドを提供し、その後、Pythonはそれを行う方法ですか?:詳細については、を参照してくださいPythonの研究ガイド
プロパティの割り当て方法
場合は、バウンドプロパティ、しかし、あなたは簡単に結果を変えることができるというパラメータをチェックする方法を記述していないことは非常にシンプルですが、我々は、公開されたプロパティに直接行けば:
s = Student()
s.score = 9999
上記の割り当てはで、スコアの範囲を制限するために、明確に実際の状況と矛盾しているset_score()
セットスコア法、およびその後によるget_score()
に、そう、結果を得るためにset_score()
あなたがパラメータをチェックすることができます方法:
class Student(object):
def get_score(self): return self._score def set_score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!') if value < 0 or value > 100: raise ValueError('score must between 0 ~ 100!') self._score = value
さて、学生の操作のいずれかのインスタンスの任意のスコアを設定することはできません。
>>>s = Student()
>>>s.set_score(60)
>>>s.get_score()
60
>>>s.set_score(9999)
Traceback (most recent call last):
...
ValueError: score must between 0 ~ 100!
しかし、上記のメソッド呼び出しと少しはそう簡単なプロパティを直接ではなく、複雑。
両方のパラメータをチェックして、変数は、そのような簡単な方法と同様のクラス属性にアクセスすることができます何もありませんか?完璧なPythonプログラマの追求のために、何をする必要があります!
機能に機能を追加することができますデコレータ(secorator)を覚えていますか?クラスのメソッド、デコレータとしての役割のために。Pythonの組み込み@property
プロパティは、メソッド呼び出しになるのデコレータは、責任があります:
class Student(object):
@property def score(self): return self.__score @score.setter def score(self, value): if not isinstance(value, int): raise ValueError('score must be an integer!!!') if value < 0 or value > 100: raise ValueError('score must between 0~100!!!') self.__score = score
@property
使用方法では、より複雑な、見てみましょうの実現。プロパティのゲッターメソッドになるためには、単に追加し@property
、この時点でそれを@property
順番に別のデコレータを作成した@score.setter
、setterメソッドになるために属性を割り当てるための責任があるので、我々はプロパティコントロールの動作を持っています。
>>> s = Student()
>>> s.score = 60 # OK,实际转化为s.set_score(60)
>>> s.score # OK,实际转化为s.get_score() 60 >>> s.score = 9999 Traceback (most recent call last): ... ValueError: score must between 0 ~ 100!
この魔法のことに注意してください@property
、例えば、私たちが動作しているとき、私たちが達成するために、このプロパティは、おそらく直接公開されていないことを知っているが、getterメソッドとsetterメソッドを介して。
あなただけのgetterメソッドを定義し、読み取り専用属性を定義することができ、setterメソッドを定義していないと、読み取り専用のプロパティは次のとおりです。
class Student(object):
@property def birth(self): return self._birth @birth.setter def birth(self, value): self._birth = value @property def age(self): return 2015 - self._birth
上記birth
読み書きプロパティであり、そしてage
ため、読み取り専用プロパティであるage
によるとbirth
、現在時刻を算出します。
概要
@property
広くパラメータに必要なチェックを確保しながら、プログラムが実行されているように、エラーの可能性を低減する、発信者がショートコードを記述することができ、クラスの定義に使用されます。