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 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...
随机推荐
- 左侧高亮(js)
//左导航高亮 (function(){ var leftnav = $('#leftnav'); //左侧ul var pi = __preset.curpathid; if(pi=='/acco ...
- Activity中的startActivityResult,setResult,finish,onActivityResult的关系
一:首先图示: 二:代码: 1:方法selectName public void selectName(View view){ Intent intent = new Intent(this,Name ...
- python进阶之路之文件处理
Python之文件处理 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...
- Code First 数据注释--DatabaseGenerated
EF中可以使用DatabaseGenerated设置数据库字段的属性,它有三个枚举值:Computed.None.Identity Computed 表示这一列是计算所得 None 不做处理 Iden ...
- OkHttp 上手
OkHttp 上手 优点 快.节省带宽. 支持 HTTP/2 和 SPDY. HTTP/2 和 SPDY 允许对同一个主机的所有请求,使用一个 socket. 如果不支持 SPDY 的话,可以用连接池 ...
- 使用java对sql server进行增删改查
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- kafka的一些常用命令
启动zookeeper bin/zookeeper-server-start.sh config/zookeeper.properties & 启动kafka bin/kafka-server ...
- .net安装windows服务配置文件config
.net安装windows服务 : 在windows服务的项目(WindowsService1)代码文件中有一个app.config 配置文件,可以通过此文件进行时间等的更改而无需重新生成项目:那我们 ...
- MYSQL 磁盘临时表和文件排序
因为Memory引擎不支持BOLB和TEXT类型,所以,如果查询使用了BLOB或TEXT列并且需要使用隐式临时表,将不得不使用MyISAM磁盘临时表,即使只有几行数据也是如此. 这会导致严重的性能开销 ...
- setTimeout与setInterval方法的区别
setTimeout与setInterval方法的区别 setTimeout()用于设定在指定的时间之后执行对应的函数或代码.,在全局作用域下执行 setTimeout(code,time[,args ...