python_ディスクリプタ

2091 ワード

記述子:
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_ _ 【クラス/オブジェクトのいずれかのメンバーの設定のみについて、記述子は異なるクラスで使用できます】