Python基础教程——9魔法方法、属性及迭代器【总结】
来源:互联网 发布:会计毕业论文知乎 编辑:程序博客网 时间:2024/06/05 16:21
1 旧式类和新式类
确保使用新式类:把__metaclass__=type放在模块的最开始【mataclass 元类】
或者
class MyClass(object):#子类化内建类object或者其他新式类
# do something
而使用旧式类:
class MyClass:
# do something
而在Python 3.0中没有旧式的类,也就不需要显式地子类化object或者将元类设置为type。所有的类都会隐式地成为object的子类——如果没有明确超类的话,就会直接子类化;否则就会间接子类化。
2归生成器和模拟生成器
递归生成器
def flatten(nested):
try:
try: nested + ''
except TypeError:pass
else: raise TypeError
for sublist in nested:
for element in flatten(sublist):
yield element
except TypeError:
yield nested
>>> list(flatten(['sdss',['sss',['fff']]]))
['sdss', 'sss', 'fff']
>>> def flatten(nested):
result = []
try:
try: nested + ''
except TypeError:pass
else: raise TypeError
for sublist in nested:
for element in flatten(sublist):
result.append(element)
except TypeError:
result.append(nested)
return result
3 八皇后回溯
def conflict(state,nextX):
nextY = len(state)
for i in range(nextY):
if abs(state[i] - nextX) in (0, nextY - i):
return True
return False
def queens(num = 8, state = ()):
for pos in range(num):
if not conflict(state,pos):
if len(state) == num - 1:
yield (pos,)
else:
for result in queens(num,state+(pos,)):
yield (pos,) + result
def prettyprint(solution):
def line(pos,length = len(solution)):
return '. '*(pos) + 'X '+ '. '*(length-pos-1)
for pos in solution:
print line(pos)
import random
prettyprint(random.choice(list(queens(8))))
print list(queens(3))
print list(queens(4))
print len(list(queens(5)))
print len(list(queens(8)))
运行结果
>>>
. X . . . . . .
. . . . . X . .
. . . . . . . X
. . X . . . . .
X . . . . . . .
. . . X . . . .
. . . . . . X .
. . . . X . . .
[]
[(1, 3, 0, 2), (2, 0, 3, 1)]
10
92
1 旧式类和新式类:
为了创建新式类必须直接或者间接子类化object,或者设置__metaclass__属性为type
2 魔法方法:
在某种情况下会被Python自动调用,比如,__init__在对象被创建后立即自动调用
3 构造方法
这是面向对象语言的共有的,可能要为自己写的每个类实现构造方法。构造方法被命名为__init__并且在对象被创建后立即自动调用
4 重写
一个类能通过实现方法来重写他的超类中定义的这些方法和属性。如果新方法要调用重写版本的方法,可以从超类直接调用未绑定版本——超类名.__init(self)或者使用super函数——super(当前类,当前对象).__init__()
5 序列和映射
创建自己的序列或者映射需要实现所有的序列或者映射规则的方法,包括__getitem__和__setitem__这样的特殊方法。
通过子类化list和dict能节省很多工作
6迭代器:
迭代器是带有next方法的简单对象。迭代器能在一系列的值上进行迭代。当没有值可供迭代时,next方法就会引发StopIteration异常。
可迭代对象有一个返回迭代器的__iter__方法,它能像序列那样在for循环中使用。
一般来说,迭代器本身也是可迭代的,即迭代器有返回自己的next方法。
7 生成器
生成器函数包括了关键字yield的函数
当被调用时,生成器函数返回一个生成器——一种特殊的迭代器。可以使用send,throw,close方法让活动生成器和外界交互
8 八皇后问题
9 静态方法 和 类成员方法
静态方法:没有self参数,可以被类本身直接调用
类方法:需要cls参数,可以直接用类的具体参数调用
- Python基础教程——9魔法方法、属性及迭代器【总结】
- Python学习笔记【九】——《python基础教程》:: 魔法方法、属性和迭代器
- Python基础教程第九章学习笔记——魔法方法、属性和迭代器
- 《Python基础教程》学习笔记之[D11]魔法方法、属性、迭代器
- 《Python基础教程》学习笔记 Chp9 魔法方法、属性和迭代器
- Python基础教程---魔法方法,属性和迭代器(1)
- Python基础教程之第9章 魔法方法, 属性和迭代器
- 《Python基础教程》读书笔记(4)之第9章魔法方法、属性和迭代器(关键词:Python/魔法方法/属性/迭代器)
- 第九章-魔法模块、属性和迭代器——python基础教程(第二版)笔记
- 《Python基础教程》学习笔记之[D10]魔法方法、属性、迭代器之 __init__
- python基础教程_学习笔记11:魔法方法、属性和迭代器
- <<Python基础教程>>学习笔记 | 第09章 | 魔法方法、属性和迭代器
- Python魔法方法--属性
- 第9章 Python笔记 魔法方法、属性和迭代器
- python中魔法属性和魔法方法
- Python 魔法方法与属性
- python中的property属性及魔法属性
- Python学习笔记(九)魔法方法,属性和迭代器
- clipboardData 对象
- DLL的Export和Import
- 新页面弹出
- 高通QSC1110的Data Abort问题(Trace32,ELF)
- 初学Android,使用主题(Theme)资源(二十一)
- Python基础教程——9魔法方法、属性及迭代器【总结】
- 刘汝佳书--p102
- hdu 2546 饭卡 01背包
- 网址验证
- nginx 子进程调度
- 排序推荐算法
- 通信开源库
- asp中设为主页和收藏页
- 泰文排版规则