Python Property関数
2184 ワード
通常、プロパティにアクセスして付与する場合は、直接クラス(インスタンス)の_dict__付き合ったり、データ記述子などと付き合ったりします.しかし、これらのアクセスと設定方法を規範化するには、複雑なデータ記述子メカニズムを導入する方法と、軽量レベルのデータ記述子プロトコル関数Property()を導入する方法があります.標準的な定義は次のとおりです.
property()関数の前の3つのパラメータは、それぞれデータ記述子の__に対応します.get__,__set__,__del__メソッドです.したがって、データ記述子との内部マッピングがあります.例を見てみましょう
この例は、setメソッドがないため、1回目の出力10後、2回目は16を出力しない.少し改造します.
今回は10と16を正しく出力できるようになりました.ドキュメントの説明を追加することもできます.
property(fget=None,fset=None,fdel=None,doc=None)
3 ,
property()関数の前の3つのパラメータは、それぞれデータ記述子の__に対応します.get__,__set__,__del__メソッドです.したがって、データ記述子との内部マッピングがあります.例を見てみましょう
class property(object):
def __init__(self,x):
assert isinstance(x,int),"x=%s must be integer" % x;
self.__x=~x;
def get_x(self):
return ~self.__x;
# def set_x(self,x):
# self.__x=~x;
x=property(get_x);
inst=property(10);
print inst.x
inst.x=16
print inst.x
この例は、setメソッドがないため、1回目の出力10後、2回目は16を出力しない.少し改造します.
class property(object):
def __init__(self,x):
assert isinstance(x,int),"x=%s must be integer" % x;
self.__x=~x;
def get_x(self):
return ~self.__x;
def set_x(self,x):
self.__x=~x;
x=property(get_x,set_x);
inst=property(10);
print inst.x
inst.x=16
print inst.x
今回は10と16を正しく出力できるようになりました.ドキュメントの説明を追加することもできます.
x=property(get_x,set_x,doc='a simple property');
:
print property.x.__doc__
a simple property
print inst.x.__doc__
int 。
:
int(x[, base]) -> integer
Convert a string or number to an integer, if possible. A floating point
argument will be truncated towards zero (this does not include a string
representation of a floating point number!) When converting a string, use
the optional base. It is an error to supply a base when converting a
non-string. If the argument is outside the integer range a long object
will be returned instead.
property() doc