python学习(九) 魔法方法、属性和迭代器

9.1 准备工作

python 3.0的所有类都会隐式地成为object的子类。

9.2 构造方法

在python中创建一个构造方法:只要把init方法的名字修改为魔法版本__init__即可。

>>> class FooBar:
    def __init__(self):
        self.somevar = 42
>>> f = FooBar()
>>> f.somevar
42

  __def__ :是析构方法,但是调用时机不确定,所以不建议使用。

  9.2.1 重写一般方法和特殊的构造方法

   子类方法可以覆盖父类的方法。

   构造函数覆盖后,如果不调用父类的构造函数,可能会导致有些父类的属性没有被初始化。

   下面两个小结是调用超类构造方法的两个解决方案。

  9.2.2 调用未绑定的超类构造方法

  

class SongBird(Bird):
    def __init__(self):          // 直接调用超类的构造方法
        Bird.__init__(self)
          XXXX

  9.2.3 使用super函数

  

class SongBird(Bird):
    def __init__(self):
        super(SongBrid, self).__init__()
        self.sound = ‘squawk!‘
    def sing(self):
        XXX

9.3 成员访问

  9.3.1 基本的序列和映射规则

  __len__(self)

  __getitem__(self.key)

  __setitem__(self.key, value)

  __delitem__(self.key)

  9.3.2 子类化列表,字典和字符串

9.4 更多魔力

9.5 属性

  9.5.1 property函数

  size = property(getSize(), setSize())

  9.5.2 静态方法和类成员方法

  9.5.3 __getattr__, __setattr__和它的朋友们

  拦截对象的所有属性访问时可能的。

  __getattrbiute__:

  __getattr_(self, name)

  __setattr__(self, name, value)

  __delattr__(self, name)

9.6 迭代器

    __iter__ :

  9.6.1 迭代器规则

  9.6.2 从迭代器得到序列

9.7 生成器

  9.7.1 创建生成器

  9.7.2 递归生成器

  9.7.3 通用生成器

  9.7.4 生成器方法

  9.7.5 模拟生成器

9.8 八皇后问题

  9.8.1 生成器和回溯

  9.8.2 问题

  9.8.3 状态表示

  9.8.4 寻找冲突

  9.8.5 基本情况

  9.8.6 需要递归的情况

  9.8.7 打包

  

时间: 2024-10-31 16:56:23

python学习(九) 魔法方法、属性和迭代器的相关文章

Python学习——数据排序方法

Python对数据排序又两种方法: 1. 原地排序:采用sort()方法,按照指定的顺序排列数据后用排序后的数据替换原来的数据(原来的顺序丢失),如: >>> data1=[4,2,6,432,78,43,22,896,42,677,12] >>> data1.sort() >>> data1 #原来的顺序被替换 [2, 4, 6, 12, 22, 42, 43, 78, 432, 677, 896] 2. 复制排序:采用sorted()内置函数,按照

python学习笔记(方法、属性、迭代器)

准备工作 为了确保类是新型类,应该把 _metaclass_=type 入到你的模块的最开始 class NewStyle(object): more_code_hereclass OldStyle: more_code_here 在这个两个类中NewType是新类,OldType是属于旧类,如果前面加上 _metaclass_=type ,那么两个类都属于新类. 构造方法 构造方法与其的方法不一样,当一个对象被创建会立即调用构造方法.创建一个python的构造方法很简答,只要把init方法,从

python魔法方法-属性访问控制

属性访问控制 所谓的属性访问控制就是控制点号访问属性的行为,而且不仅是类的外部,连类的内部也受控制,代码见真章,边看代码边解释: __getattr__(self, item) 定义当访问不存在的属性时的行为,注意是不存在的属性. class Foo(object): def __init__(self, value): self.value = value def __getattr__(self, item): print item # 查看得到的参数是什么 print type(item)

Python学习之旅—Day07(生成器与迭代器)

前言 本篇博客主要专注于解决函数中的一个重要知识点--生成器与迭代器.不管是面试还是工作,生成器与迭代器在实际工作中的运用可以说是非常多,从我们第一天开始学习for循环来遍历字典,列表等数据类型时,我们就已经和生成器,迭代器打交道了!本篇博客从最基础的基本概念,例如容器,可迭代对象,生成器,迭代器的概念,到for循环是怎么工作的娓娓道来.希望本篇博客能够帮助大家切实掌握生成器与迭代器的使用与底层原理. 一.容器 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in

python中的魔法方法

1.什么是魔法方法? 魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的.它们经常是两个下划线包围来命名的(比如 __init__,__lt__),Python的魔法方法是非常强大的,所以了解其使用方法也变得尤为重要! 2.__init__(self[, ...]),__new__(cls[, ...]),__del__(self) __init__ 构

九.魔法方法、特性和迭代器

0.Python中双下划线__有特殊意义. 1.构造函数和析构函数: class Test: def __init__(self): #构造函数,创造实例默认执行 pass def __del__(self): #析构函数,程序全部运行完执行 pass 2.类的序列和映射协议,让类的实例可以实现类似序列的操作. class Test: # 构造函数,创造实例默认执行 def __init__(self): self.date={} #这个方法通常要设置字典为数据类型 print("Default

[小甲鱼]入门学习python笔记 【魔法方法】

//__new__(cls[,....]) //对象实例化调用的第一个方法,它的第一个参数是这个类,而其他参数会直接传递给__init__()方法 //需要在基类的基础上对其进行修改时重写__new__()方法 //__del__()方法 //只有在该类实例化的对象全部被del掉时,才调用__del__()方法 //python 中的运算符重载 class New_int(int): //基于基类int的子类New_int def__add__(self,other) //重载运算符 + ret

Python学习之路 - yield生成器,迭代器

生成器 把结果保存成生成器的状态,普通的函数中出现yield,就变成生成器. 1.Python 3.3 中 xrange已合并到range. 1 i = range(10) 2 print (i) 3 4 =>range(0, 10) 2. yield 生成器. 1 def func(): 2 print(111) 3 yield 1 4 print(222) 5 yield 2 6 print(333) 7 yield 3 8 return "done" 9 10 k = fu

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

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

045魔法方法:属性访问

属性访问:__getattr__(self,name)  定义当用户试图获取一个不存在的属性时的行为 __getattribute__(self,name)  定义当该类的属性被访问时的行为 __setattr__(self,name,value)  定义当用一个属性被设置时的行为 __delattr__(self,name)  定义当用一个属性被删除时的行为 例:>>> class C:  ...     def __getattribute__(self, name):