python高级编程之描述符与属性03
# -*- coding: utf-8 -*-
# python:2.x
__author__ = 'Administrator'
#属性Property
#提供了一个内建描述符类型,它知道如何将一个特性链接到一组方法上,采用fget参数和3个可选的参数-fset,fdel,doc最后一个参数可以提供用来定义一个后链接到特性的docstring,就像个方法,如下
class MyClass(object):
def __init__(self):
self._my_seceret_ting=1
def _i_get(self):
return self._my_seceret_ting
def _i_set_(self,a):
self._my_seceret_ting=a
def _i_delte(self):
print 'del'
my_ting=property(_i_get,_i_set_,_i_delte,'the ting')
instance_of=MyClass()
print instance_of.my_ting#1
instance_of.my_ting=3
print instance_of.my_ting#3
del instance_of.my_ting#del
help(instance_of)
"""
属性简化了描述符编写,但是在使用类继承时必须小心处理,所创建的特性使用当前类方法创建,而不是使用在派生类中重载方法
如下:
"""
class A(object):
def __get1(self):
return '&aa'
price=property(__get1)
class S(A):
def _get_price(self):
return 'bb'
p=S()
print p.price#&aa
#解决方法是使用另一种方法手工将属性实例重定向到正确的方法,如下
class B(object):
def _g(self):
return '&qqw'
def _g1(self):
return self._g()
pr1=property(_g1)
class BB(B):
def _get_price(self):
return'&bb'
cc=BB()
print cc.pr1#&qqw
#尽管如此,大部分时候属性都添加到类中,以隐藏其性,链接到它们的方法是私有的,所有重载它们是不好的做法,在这样的情况下,重载属性本身会更好一些,如下
class B(object):
def _g(self):
return '&q1qw'
p1=property(_g)
class BB(B):
def _a(self):
return'&bb1'
aa=BB()
print aa.p1#&q1qw
print '&'*300
#槽:__slots__特性为指定类设置一个静态特性列表,并且路过每个类实例中的__dict__列表创建工作,用来为特性很少的类节省存储空间,因为将不在每个实例中创建__dict__
#另一方便px还可以有助于设计签名被交结的类,例如
class Fr(object):
__slots__=['ice','apply']
print '__dict__' in dir(Fr)#False
print 'ice'in dir(Fr)#True
g=Fr()
g.ice=1
g.apply=1
g.ic1e=1#AttributeError: 'Fr' object has no attribute 'ic1e'
#注意:任何新的特性都将在__dict))中被添加,所以无法在派生类上工作
python高级编程之描述符与属性03的更多相关文章
- python高级编程之描述符与属性02
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #元描述符 #特点是:使用宿主类的一个或者多个方法来执行一个任务,可 ...
- python高级编程之最佳实践,描述符与属性01
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #最佳实践 """ 为了避免前面所有的 ...
- python描述符和属性查找
python描述符 定义 一般说来,描述符是一种访问对象属性时候的绑定行为,如果这个对象属性定义了__get__(),__set__(), and __delete__()一种或者几种,那么就称之为描 ...
- Python 属性描述符和属性的查找过程
属性描述符可以用来控制给属性赋值的时候的一些行为 import numbers class IntField: def __get__(self, instance, owner): return s ...
- python高级编程读书笔记(一)
python高级编程读书笔记(一) python 高级编程读书笔记,记录一下基础和高级用法 python2和python3兼容处理 使用sys模块使程序python2和python3兼容 import ...
- Python高级编程和异步IO并发编程
第1章 课程简介介绍如何配置系统的开发环境以及如何加入github私人仓库获取最新源码. 1-1 导学 试看 1-2 开发环境配置 1-3 资源获取方式第2章 python中一切皆对象本章节首先对比静 ...
- 第十一章:Python高级编程-协程和异步IO
第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...
- python高级编程:有用的设计模式3
# -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"&qu ...
- 第三章:Python高级编程-深入类和对象
第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...
随机推荐
- web前端代码规范 - HTML代码规范
Bootstrap HTML编码规范 本文转载自w3cschool. 由于bootstrap得到了世界的认可,因此,此规范用于规范html代码有一定的说服力. 交流qq群:164858883.欢迎各位 ...
- 用Scertify Professional实现代码审查
用Scertify Professional实现代码审查 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs Scertify Professional是一 ...
- MongoDB 的 MapReduce 大数据统计统计挖掘
MongoDB虽然不像我们常用的mysql,sqlserver,oracle等关系型数据库有group by函数那样方便分组,但是MongoDB要实现分组也有3个办法: * Mongodb三种分组方式 ...
- 正确的安装qwtplot3D开发库
1.从网上下载qwtplot3D的最新版本:http://qwtplot3d.sourceforge.net/ 2.解压qwtplot3d-0.2.7.zip到C盘根目录下(注意:路径中不能带有中文汉 ...
- CSS3绘制环形进度条
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- js数字精度丢失
http://www.cnblogs.com/snandy/p/4943138.html
- 一个简单的ajax对象
function ajax(options) { //请求参数 options = { //类型 type: options.type || "Post", //地址 url: o ...
- oracle学习笔记(三)oracle函数
--oracle 函数 --lower(char):将字符串转换为小写格式 --upper(char):将字符串转换为大写格式 --length(char):返回字符串的长度 --substr(cha ...
- Codeforces Round #350 (Div. 2)A,B,C,D1
A. Holidays time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- Mysql存储过程分析
为了搞明白为什么mysql的存储过程是高效的,我们需要理解mysql的执行流程是什么,当输入sql语句之后,mysql会先进行sql语句语法正确性检查,然后再进行编译,然后才执行,最后把结果返回.如下 ...