[读书]Python学习手册--属性管理1

属性管理-特性

一般开发这不必关心属性的实现,对工具的构建这来说,了解这一块对API的灵活性有帮助。

大多数情况下,属性位于对象自身之中,或者继承自对象所派生自的一个类。 ----python学习手册

property

property(fget=None, fset=None, fdel=None, doc=None) -> property attribute

fget is a function to be used for getting an attribute value, and likewisefset is a function for setting, and fdel a function for del’ing, an attribute.

可以使用函数的方式也可以使用装饰器的方式来使用

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#python2.7x
#property.py  @2014-07-26
#author: orangleliu

class Person(object):
    def __init__(self, name):
        self._name = name 

    def getName(self):
        print 'fetch....'
        return self._name

    def setName(self, value):
        print 'change...'
        self._name = value

    def delName(self):
        print 'remove....'
        del self._name

    #也可以使用装饰器的方式
    name = property(getName, setName, delName, "name property docs")

bob = Person('Bob')
print bob.name
print Person.name.__doc__
bob.name = 'bob'
print bob.name
del bob.name
#print bob.name

'''
并没有想象中的那么好使

#类没有继承object的情况下
fetch....
Bob
name property docs
bob
set del 就没有使用啊

#类继承object的情况下
Bob
name property docs
change...
fetch....
bob
remove....
'''

书中的例子并没有继承object, 使用2.7的版本和书中结果不一致。 需要继承object才能达到预期的结果

添加属性的默认操作

这里使用装饰的方式, 只要value赋值就进行一个默认的操作,可以看到我们使用属性的方式就可以默认调用函数来处理属性。g.value 而不是 g.valueXX()

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#python2.7x
#property.py  @2014-07-26
#author: orangleliu

class GetSquare(object):
    def __init__(self, num):
        self.value = num

    @property
    def value(self):
        return self._value

    @value.setter
    def value(self, num):
        self._value = num**2

'''
从上面可以看到set属性值的时候作了一些属性的某人动作,有时候很有必要
'''

g = GetSquare(4)
print g.value

g.value = 10
print g.value

其实这种方式很类似于javabean中的方式。

时间: 2024-10-16 08:56:42

[读书]Python学习手册--属性管理1的相关文章

Python学习手册笔记——管理属性

管理属性有四种方式:1.__getattr__和__setattr__:把未定义的属性获取和所有的属性赋值指向通用的处理器方法. 2.__getattribute__:把所有的属性获取和赋值指向Python2.6中的新式类和Python 3.0中的所有类的中的一个处理器方法 3.property内置函数,把特定属性访问定位到get和set函数,也叫做特性 4.描述符:把特定属性访问定位到具有任意get和set函数的类的实例 特性 attribute = property(fget, fset,

《Python学习手册》读书笔记【转载】

转载:http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html 之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我在这里推荐了几篇文章,有其他语言编程经验的人简单看一看就可以很快地开始编写Python程序了. 黑体表示章节, 下划线表示可以直接在原文对应位置查到的专有技术名词. 原书

读书分享全网学习资源大合集,推荐Python学习手册等三本书「01」

0.前言 在此之前,我已经为准备学习python的小白同学们准备了轻量级但超无敌的python开发利器之visio studio code使用入门系列.详见 1.PYTHON开发利器之VS Code之初识.简介.安装.中文 2.PYTHON开发利器之VS Code 主题.界面美化.快捷键.编辑器技巧 3.PYTHON开发利器之VS Code 常用插件介绍 4.PYTHON开发利器之使用VS Code进行python程序开发 5.1.PYTHON开发利器之使用VS Code+Git进行python

Python学习手册笔记

之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我在这里推荐了几篇文章,有其他语言编程经验的人简单看一看就可以很快地开始编写Python程序了. 黑体表示章节, 下划线表示可以直接在原文对应位置查到的专有技术名词. 原书配套答案请到http://www.hzbook.com/Books/4572.html下载,简单注册即可. 第三章 如何运行程序 impor

python学习手册

1.GUI开发 python中界面开发使用wxPython库,开发手册 wxPytyhon in action; *  http://wiki.woodpecker.org.cn/moin/WxPythonInAction *  http://blogimg.chinaunix.net/blog/upfile2/090208120235.pdf python学习手册

global语句(python学习手册422页)

# -*- coding: cp936 -*- #python 27 #xiaodeng #global语句(python学习手册422页) #实际上就是一个名为__builtin__的模块,但是必须要import之后才能使用,因为变量名builtin本身并没有预先内置 #global语句,命名空间的声明,告诉python计划生成一个或多个全局变量. #全局变量名小结: #1.全局变量是位于模块文件内部的顶层的变量名 #2.全局变量如果是在函数内被赋值的话,必须要经过global声明 #3.全局

python学习手册——1介绍python对象类型

在python ,数据以对象的形式出现--无论是python提供的内置对象,还是使用python或是像C扩展库这样的扩展语言工具创建的对象.尽管在以后才能确定这一概念,但对象无非是内在中的一部分,包含数值和相关操作的集合. 由于对象是python 最基本的概念,从这一章开始我们将会全面地体验python的内置对象类型. python程序可以分解成模块,语句,表达式以及对象,如下所示: 1.程序由模块构成 2.模块包含语句 3.语句包含表达式 4.表达式建立并处理对象 为什么使用内置类型 1.内置

《Python 学习手册》笔记 1

今天看了 Udacity 的 iOS 学习路线介绍,作者的看法是,最好先学习 Swift,而不是 Objective-C,原因一方面是 Swift 要简单一些,另一方面是因为 Apple 打算用 Swift 作为将来的官方语言取代 OC. 大学里,编程语言课程就是 C 和 C++.我不知道这是谁定的,也许他们有足够充分的理由.但是对于大多数人来说,这两个语言——一个太底层,一个太复杂)其实不见得那么重要.还不如学学 Ruby 和 Python 这样的抽象度更高的解释性语言,易于使用,而且内置了强

python学习手册中的一些易忘的点(4-7部分)

有时间系统看一遍python学习手册,记录一些易忘点 1.python函数高聚合低耦合1)对于输入使用参数并且对于输出使用return2)只有在真正必要的情况下使用全局变量3)不要改变可变类型的参数,除非调用者希望这样做4)每个函数都应该有一个单一的.统一的目标5)每一个函数应该相对较小6)避免直接改变在另一个文件中的变量 2.递归处理任意结构>>> a=[3,[2,[2,3,4],2],1,[1,5,[1,3,3]]]>>> def sumtree(L):...