# -*- 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的更多相关文章

  1. python高级编程之描述符与属性02

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #元描述符 #特点是:使用宿主类的一个或者多个方法来执行一个任务,可 ...

  2. python高级编程之最佳实践,描述符与属性01

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #最佳实践 """ 为了避免前面所有的 ...

  3. python描述符和属性查找

    python描述符 定义 一般说来,描述符是一种访问对象属性时候的绑定行为,如果这个对象属性定义了__get__(),__set__(), and __delete__()一种或者几种,那么就称之为描 ...

  4. Python 属性描述符和属性的查找过程

    属性描述符可以用来控制给属性赋值的时候的一些行为 import numbers class IntField: def __get__(self, instance, owner): return s ...

  5. python高级编程读书笔记(一)

    python高级编程读书笔记(一) python 高级编程读书笔记,记录一下基础和高级用法 python2和python3兼容处理 使用sys模块使程序python2和python3兼容 import ...

  6. Python高级编程和异步IO并发编程

    第1章 课程简介介绍如何配置系统的开发环境以及如何加入github私人仓库获取最新源码. 1-1 导学 试看 1-2 开发环境配置 1-3 资源获取方式第2章 python中一切皆对象本章节首先对比静 ...

  7. 第十一章:Python高级编程-协程和异步IO

    第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...

  8. python高级编程:有用的设计模式3

    # -*- coding: utf-8 -*-__author__ = 'Administrator'#python高级编程:有用的设计模式#访问者:有助于将算法从数据结构中分离出来"&qu ...

  9. 第三章:Python高级编程-深入类和对象

    第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...

随机推荐

  1. Laravel-表单篇-零散信息

    1.asset('path'):用于引入静态文件,包括css.js.img 2.分页,调用模型的paginate(每页显示的行数)方法, 如$student = Student::paginate(2 ...

  2. 线程 (detach的作用)

      线程状态在一个线程的生存期内,可以在多种状态之间转换.不同操作系统可以实现不同的线程模型,定义许多不同的线程状态,每个状 态还可以包含多个子状态.但大体说来,如下几种状态是通用的:       就 ...

  3. Hacker(24)----防范密码被轻易破解

    无论什么类型密码,用户在设置时都有非常小心,防止自己设置的密码被他人轻易破解.为保护重要的文件和资料,可采用加密工具进行加密,即可选择Win7系统自带的BitLocker,也可使用Internet中很 ...

  4. Enabling Active Directory Authentication for VMWare Server running on Linux《转载》

    Enabling Active Directory Authentication for VMWare Server running on Linux Version 0.2 - Adam Breid ...

  5. css_day7

  6. CocoaPods的一些理解

    在这片博客中,我将分享我从cocopods中学到的东西. 如果你使用Cocoapods,你的.gitignore文件中会有什么. 这个问题在debate on SO中被提及,但是我建议只追踪Podfi ...

  7. Android下按钮的使用方法

    package com.hangsheng.button; import android.app.Activity; import android.os.Bundle; import android. ...

  8. performSelector的方法

    在此我对performSelector系列方法进行了总结 1. - (id)performSelector:(SEL)aSelector; - (id)performSelector:(SEL)aSe ...

  9. css 文本域textarea显示成label标签

    <html> <head>     <title>textarea显示为label</title> <style type="text/ ...

  10. 基于Pojo的开发模式(day03)

    上一次的文章讨论到了Spring的设计目标:使得JEE开发更易用. ok,作为一个Java开发人员,应该都知道struts这个框架,不知道是否大家都清楚struts1和struts2的区别. 首先,这 ...