# #2.python面向对象的构造及析构方法(魔术方法)
# #1.__call__可以把一个类的实例当作函数使用
# class printclass:
# def __init__(self,name,age):
# self.name=name
# self.age=age
# def __call__(self,*arg):
# #*arg意为多个可变元组类型参数
# print("{}'s age is {}".format(self.name,self.age))
# return arg[0]+arg[1]
# p=printclass('王佳琪',"14")
# print(p(1,2))
# #2. __getitem__()指在已经实例化类的情况下,可以通过self(key)的类似函数调出对应的键值。
class person:
def __init__(self,name,age):
self.registry={'name':name,"age":age}
def __getitem__(self,key):
if key not in self.registry.keys():
raise Exception ('Please registry the key:{} first!'.format(key))
return self.registry[key]
def __setitem__(self,key,value):
self.registry[key]=value
p=person('王小军','15')
#print(p["nam"])#results:raise Exception ('Please registry the key:{} first!'.format(key))Exception: Please registry the key:nam first!
#print(p["name"])#results:王小军
#例中已知self.registry词典,通过__getitem__方法让p["nam"]不在self.registry里的报异常,反之则返回对应key的键值。
#3.__setitem__用于:一,新建键及其对应的键值;二,改变旧有键值
# p['name']='王龙'
# print(p["nam"]) #王龙
#二,改变旧有键值
# p.__setitem__('nam','王龙')
# print(p['nam']) # 王龙
#描述符__get__ __set__ __delete__
#定义:描述符是指带有绑定行为的对象属性,如果一个对象定义了上述三个方法之一,它就是描述符。
#1.1如果一个对象定义了__get__(),__set__()两个方法,那么这个对象被称为数据描述符。若有一个类的词典与之同名,则优先使用数据描述符,若这个对象只定义了一个__get__(),则称之为非数据描述符;
##如果一个实例的字典实现了无数据描述符的定义,那么这个字典中的属性会被优先使用。
#__get__()调用一个类的属性时触发
class meter:
value=10
def __get__(self,instance,owner):
return self.value
def __set__(self,instance,owner):
self.value+=1
class instance:
a=meter()
b=instance()
print(b.a) #10
#该函数的工作方式首先,它会访问自己的实例名称空间: a.__dict__['x']如果没有,则会访问类及超类的名称空间,
#__set__()为一个属性赋值时触发
b.a=2 #11
print(b.a)
ava 大数据分析,爬虫,python,算法,diango,github等等学习资料,每堂课内容十足,绝非微信推广的十几分钟左右的一堂课,每个文件夹资料仅需5元,还有更多的实战项目,小程序等你来拿统统五元。
欲购请加:479952513 先看再买。备注:买资料。
633

被折叠的 条评论
为什么被折叠?



