码迷,mamicode.com
首页 > 编程语言 > 详细

python描述符

时间:2019-01-08 21:01:12      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:初始化   类成员   get   class   elf   odi   特殊方法   函数   没有   

-- coding=utf-8 --

class NonNeg:
def init(self,default=0):
self.default = default
pass
def get(self,instance,owner):
return self.default

def __set__(self,instance,val):
    if val > 0:
        self.default = val
        pass
    else:
        print(‘The value must be NonNegative!‘)
    pass
def __delete__(self,instance):
    pass
pass

class Movie:
rating = NonNeg()
score = NonNeg()
pass
if name == ‘main‘:
m = Movie()
print(‘rating:‘,m.rating)
print(‘score:‘,m.score)
m.rating = 80
print(‘rating:‘,m.rating)
m.score = -3
print(‘score:‘,m.score)

    字典追加数据:

字典[‘key‘] = ‘value‘

类的方法定义:
def 方法名(self,参数)
类方法多的调用:
在类内部调用:self.方法名()
在类外部调用:对象名.方法名()
构造方法:
构造方法的作用就是类实例化时初始化实例
init()方法就是类实例化的第二部自动调用的函数
注意其方法名是固定的,但参数也同普通方法一样,至少应带有self参数
初始化实例包括:定义和初始化实例属性:或调用类的一些方法
构造方法可以带有除self外的其他各种参数,可以达到在实例化类时,为相应的属性传

入指定的值
同名的类属性与实例属性相同时:
以实例名.属性名引用时,优先引用实例属性
以类名.属性名引用时,只能引用类属性
属性访问的特殊方法(反射):
主要工具函数:
hasattr(obj_bame,‘属性名‘) 判断当前对象中有没有固定属


setattr(obj_name,‘属性名‘,值) 设置属性值
getattr(obj_name,‘属性名‘) 取属性值br/>属性包装:
将方法包装成属性,以隐藏相关实现:
控制属性的类型或范围
虚拟属性(由其他属性处理后得来)
三种属性操作:
可读:@property
可写:@<property-name>.setter
可删:@<property-name>.deleter

if name == "main": 是说可以单独使用这个脚本,这个脚本也可以被

引用

描述符:
将实现特殊协议方法的类作为另一个类的类属性
用来拦截和控制属性访问并可以重复使用
协议方法
get()
set()
delete()
分类
数据描述符(实现全部协议方法)
非数据描述符(实现部分协议方法)
说明:所有类成员函数都是非数据描述符
同名的实例属性和非数据描述符(以方法为例)访问优先级
注意:只能在新式类中使用
call()让类的实例如函数一样可调用

python描述符

标签:初始化   类成员   get   class   elf   odi   特殊方法   函数   没有   

原文地址:http://blog.51cto.com/3945465/2340330

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!