Python(5)——关于描述符的三种操作方法
python中的描述符是用于描述对象中的属性。主要作用就是对属性操作提供限制,验证,管理等相关权限的操作。
描述符主要有三种操作需要设置:
get 获取属性的操作
set 设置属性的操作
delete 删除属性的操作
描述符方法一
#描述符类 class Description: #成员属性 #name = '' #初始化方法 def __init__(self): #为当前类/对象添加一个成员属性(当前类)来接收需要描述的成员属性(要描述的类)此处还没有接收(占位) self.name = None #get获取属性值的方法 def __get__(self,obj,cls):# self 用于接收当前描述符类的对象 obj 接收用于管理的成员的对象 cls 用于接收管理成员的类 print('获取方法被触发') self.name = str(self.name) return self.name[:4] #set设置属性值的方法 def __set__(self,obj,val): #self 用于接收当前描述符类的对象 obj 接收用于管理的成员的对象 val 设置的值 print('设置方法被触发') #print(self,obj,val) #在此处可以添加限制和判断(密码奇数时*2) if val %2 == 1: val *= 2 #完成了(email)对象的属性值的设置 self.name = val #delete删除属性值的方法 def __delete__(self,obj): #self当前描述符类的对象 obj 接收用于管理的成员的对象 #用户代为删除操作 del self.name #声明一个邮箱的类 class Email #属性 #用户名 account = 'conghao@zhiling.com' #密码(为密码设置了描述符 的对象) 这一步相当于吧password的所有传入了Description的对象当中 password = Description()
描述符方法2
#邮箱类 class Email: #成员属性 #为username添加描述符 #username = '' #设置邮箱账号最大的长度 maxlength = 6 #为描述符添加一个临时变量(在描述符中代替username进行操作) tmpusername = None password = '' #成员方法 #为username的描述符进行设置(添加方法) #获取username的描述符方法 def getusername(self): print('获取操作被触发') #返回值之前进行值的修饰,两边添加星星 if self.tmpusername != None: self.tmpusername = '★' + self.tmpusername + '★' #设置获取username的时候的值 return self.tmpusername #设置username的描述符方法 def setusername(self,val): print('设置操作被触发') #限制,根据Email类的最大账号长度对用户名进行截取之后在设置 #检测val是否是字符串类型 if isinstance(val,str): val = val[0:self.maxlength] self.tmpusername = val #删除username的描述符方法 def delusername(self): print('删除操作被触发') #删除操作 del self.tmpusername #为username设置描述符 username = property(getusername,setusername,delusername)
描述符方法3(属性修饰符)
#邮箱类 class Email: #用户名 username = '' #密码 password = '' #使用描述符来操作昵称 #昵称 petname = '小乖乖' #为描述符设置临时变量 __petname = None #成员方法(暂无) #描述符设置的三个部分 获取,设置和删除 #处理petname获取操作 @property def petname(self): print('获取操作被触发') return self.__petname #处理petname的设置操作 @petname.setter def petname(self,val): print('设置操作被触发') #设置操作 self.__petname = val #处理petname的删除操作 @petname.deleter def petname(self): print('删除操作被触发') #删除操作 del self.__petname
#常用内置属性
#__dict__查看类和对象所属成员
class Animal: name = 'xixi' age = 3 sex = '公' def tiao(self): print('jump~~') def __init__(self): self.color = 'white' print(Animal.__dict__) xx = Animal() print(xx.__dict__)
#__doc__查看类文档
class LYB: ''' 这是一种修养 ''' print(LYB.__doc__)
#__name__获取当前类名
class Dog: def jiao(self): print(Dog.__name__) #类 Dog.jiao(1) #对象 gou = Dog() gou.jiao()
#__bases__获取类的继承列表
class BaBa: pass class MaMa: pass class Son(MaMa,BaBa): pass print(Son.__bases__)