标签:初始化 类成员 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()让类的实例如函数一样可调用
标签:初始化 类成员 get class elf odi 特殊方法 函数 没有
原文地址:http://blog.51cto.com/3945465/2340330