python描述符

-- 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()让类的实例如函数一样可调用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章