chapter9: python 类的方法,属性,迭代器(new[old]-type class,[un]bound method,super,protocol,property,iterators)

本文主要是介绍chapter9: python 类的方法,属性,迭代器(new[old]-type class,[un]bound method,super,protocol,property,iterators),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

chapter 9:Magic Methods, Properties, and Iterators

1 new-type class & old-type class

参考: http://ebkk.blog.163.com/blog/static/194135085200972692621216/

从python 2.2 起,如果一个类继承自object 对象(或者它是任何内建类型如list, dict, file 的子类),那它就是一个new-style class 。在此之前,Python不允许通过继承内建类型生成新类,也根本没有object 这个对象 。

# old-type 举例
#! /usr/bin/python
__metaclass__ = type 
class Person:
	defshow():	print ‘just a test!’
p = Person()
p.__init__()  # init() 是object对象的method,新类才有;如果以class Person的方式,则为old-type,则需要在最初标示__metaclass__= type,标示为new-type
# new-type 举例
#! /usr/bin/python
Class Person(object): # 内容略,和上列有同样效果

2 magic method-> constructors 构造函数

class TestConstructor(object):#self.param2 = 2 wrongparam1 = 1def __init__(self,value=41):self.somevalue = valuedef f1(self): #must have selfpass
t1 = TestConstructor()
print t1.somevaluet2 = TestConstructor('value can be assigned too')
print t2.somevalue
t2.f1()
print t2.param1print TestConstructor.param1

3 bound method /unbound method & super function

简单说:绑定的只通过实例(instance)调用,unbound只通过类(class)调用

super function 和unbound method 区别?

Super 更直观,灵活;如有多个父类时可以一次性获取,返回superclass object

class Bird(object):def __init__(self):self.hungry = Truedef eat(self):if self.hungry:print 'eat!!'self.hungry = Falseelse :print 'i am full'
class SongBird(Bird): # must be superClass,can use unbound method in class##overridedef __init__(self):#Bird.__init__(self) # using unbound methodsuper(SongBird,self).__init__() # same with upper,using super self.song = 'music time'def sing(self):print self.song
sb1 = SongBird()
sb1.eat()
sb1.sing()

4 The Basic Sequence and Mapping Protocol 

Question: p207 create an infinite sequence 
Protocol:这里的protocol类似接口等,是一种约定的实现方法

seq = [1,2,3,3]
dic = {'name':'lili','no':10}print seq.__len__()
print seq.__getitem__(2)
seq.__setitem__(2,20)
print seq.__getitem__(2)
seq.__delitem__(1) #delete seq[1] #[1,20,3]
print seq

5 property function

参考: http://blog.csdn.net/jiyucn/article/details/2137679 
property( [fget[, fset[, fdel[, doc]]]])

Return a property attribute for new-style classes (classes that derive from object). 
fget is a function for getting an attribute value, likewise fset is a function for setting, and fdel a function for del'ing, an attribute. 

If given, doc will be the docstring of the property attribute. Otherwise, the property will copy fget's docstring (if it exists). This makes it possible to create read-only properties easily using property() as a decorator:

大概含义是,如果要使用property函数,首先定义class的时候必须是object的子类。通过property的定义,当获取成员x的值时,就会调用getx函数,当给成员x赋值时,就会调用setx函数,当删除x时,就会调用delx函数。使用属性的好处就是因为在调用函数,可以做一些检查。如果没有严格的要求,直接使用实例属性可能更方便。

class C(object):def __init__(self):self._x = Noneself._y = None def getx(self):print '------getx'return self._x,100,200def setx(self, value):print '------setx'self._x,self._y = valuedef delx(self):print '------delx'del self._xxx = property(getx, setx, delx, "I'm the 'x' property.")c1 = C()
c1._x = 10# 使用property,实现调用函数getx,只读获取return值
print c1.xx   # ------getx (10, 100 ,200)# 使用property,实现调用函数setx,赋值
c1.xx = 11,22
print c1._x,c1._y  # ------setx 11 22  
print '--', C.xx.__doc__ # I'm the 'x' property

# 如何调用delx?  


未完待续

这篇关于chapter9: python 类的方法,属性,迭代器(new[old]-type class,[un]bound method,super,protocol,property,iterators)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/610085

相关文章

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字