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__)