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 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...
随机推荐
- iOS UIView显示颜色渐变
-(void)colorWear:(UIView *)view{ CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame ...
- PyQt4--QPushButton阵列
# -*- coding: utf-8 -*- from PyQt4.QtCore import * from PyQt4.QtGui import * import sys import funct ...
- PHP的错误处理方式
错误类型 PHP 主要有两种错误:触发错误和异常.其中触发错误大概可以分为:编译错误.引擎错误和运行时错误,其中前两个是无法捕获的:异常都是可以捕获的,当没有尝试捕获时则会中断代码. 触发错误可以通过 ...
- jQuery的ajax jsonp跨域请求
了解:ajax.json.jsonp.“跨域”的关系 要弄清楚以上ajax.json.jsonp概念的关系,我觉得弄清楚ajax是“干什么的”,“怎么实现的”,“有什么问题”,“如果解决存在的问题”等 ...
- C++内存泄露检測原理
转自:http://hi.baidu.com/jasonlyy/item/9ca0cecf2c8f113a99b4981c 本文针对 linux 下的 C++ 程序的内存泄漏的检測方法及事实上现进行探 ...
- Windows下命令行直接编译程序
D:\> cl hello.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Cop ...
- ulimit 参数介绍
Linux对于每个用户,系统限制其最大进程数.为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数 可以用ulimit -a 来显示当前的各种用户进程限制.下面我把某linux用户的最 ...
- JQuery.ajax一解
关于JQuery.ajax方法,好处也不用多说了,主要是想记下ajax中的一些参数: url:请求的目标地址,为一个字符串,格式为:http://localhost:端口号/User/方法名.eg:现 ...
- CSS3绘制环形进度条
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- asp net 编程问题 实现下一篇 和上一篇效果
首先是access数据库,有一个名为news的表,里面有三个字段,分别为id,classid 和name 其中id为主键,classid可以重复 现在有以下数据: id classid name 1 ...