python_ディスクリプタ
2091 ワード
記述子:
1つのクラスに3つのマジックメソッド(get,set,delete)の1つまたはすべてのクラスが含まれている場合、このクラスは記述子です.
記述子の役割:
記述子の役割は、クラス/オブジェクト内のメンバーの詳細な管理操作です.
データ記述子:(完全)
同時に3つのマジックメソッドを備えたクラスがデータ記述子です
非データ記述子(不完全):
3つのマジックメソッドを同時に備えていないクラスは非データ記述子である.
3つのマジック方法:
記述子と属性マジックの方法:
属性マジックメソッド_getattribute_ _ _ _getattr_ _ _ _setattr_ _ _ _delattr_ _ 【現在のクラス/オブジェクトのすべてのメンバーの管理に対して、属性マジックメソッドは現在のクラスにのみ有効です】
記述子(クラス):_get_ _ _ _set_ _ _ _delete_ _ 【クラス/オブジェクトのいずれかのメンバーの設定のみについて、記述子は異なるクラスで使用できます】
1つのクラスに3つのマジックメソッド(get,set,delete)の1つまたはすべてのクラスが含まれている場合、このクラスは記述子です.
記述子の役割:
記述子の役割は、クラス/オブジェクト内のメンバーの詳細な管理操作です.
データ記述子:(完全)
同時に3つのマジックメソッドを備えたクラスがデータ記述子です
非データ記述子(不完全):
3つのマジックメソッドを同時に備えていないクラスは非データ記述子である.
3つのマジック方法:
__get__():
: ( )
:
:self / /
: ,
:
__set__():
: ( )
:
:self / /
:
:
__delete__():
: ( )
:
:self /
:
:
:
class Descriptor:
# ( username )
def __init__(self):
self.tmpvar = ' '# ,
#
def __get__(self,obj,cls):#self obj Email mail cls Email
#
result = self.tmpvar[0] + '*' + self.tmpvar[-1]
return result
def __set__(self,obj,val):#self / obj Email mail /val
#
# 8
#
if len(val) > 8:
self.tmpvar = val[0:8]
else:
self.tmpvar = val
def __delete__(self,obj):#self / obj Email mail
#
if obj.isallowdel_username == True:
del self.tmpvar
# ( )
class Email:
#
username = Descriptor()# [ ]
# username
isallowdel_username = True
#
mail = Email()
#
#print(mail.username)
#
mail.username = 'lovemybaby'
# print(mail.username)
#
print(mail.username)
del mail.username
# print(mail.username)
記述子と属性マジックの方法:
属性マジックメソッド_getattribute_ _ _ _getattr_ _ _ _setattr_ _ _ _delattr_ _ 【現在のクラス/オブジェクトのすべてのメンバーの管理に対して、属性マジックメソッドは現在のクラスにのみ有効です】
記述子(クラス):_get_ _ _ _set_ _ _ _delete_ _ 【クラス/オブジェクトのいずれかのメンバーの設定のみについて、記述子は異なるクラスで使用できます】