分类: Python

200 篇文章

100、接口
接口 在 Python 中,鸭子类型(duck typing)是一种动态类型的风格。所谓鸭子类型,来自于 James Whitcomb Riley 的“鸭子测试”: 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。 假设我们需要定义一个函数,这个函数使用一个类型为鸭子的参数,并调用它的走和叫方法。 在鸭子类型的语言中,这样的函数可以接受任何类型的对象,只要这个…
099、重定义森林火灾模拟
重定义森林火灾模拟 在前面的例子中,我们定义了一个 BurnableForest,实现了一个循序渐进的生长和燃烧过程。 假设我们现在想要定义一个立即燃烧的过程(每次着火之后燃烧到不能燃烧为止,之后再生长,而不是每次只燃烧周围的一圈树木),由于燃烧过程不同,我们需要从 BurnableForest 中派生出两个新的子类 SlowBurnForest(原来的燃烧过程) 和 InsantBurnFore…
098、super() 函数
super() 函数 super(CurrentClassName, instance) 返回该类实例对应的父类对象。 class Leaf(object): def __init__(self, color="green"): self.color = color def fall(self): print "Splat!" class MapleLeaf…
097、继承
继承 一个类定义的基本形式如下: class ClassName(ParentClass): """class docstring""" def method(self): return class 关键词在最前面 ClassName 通常采用 CamelCase 记法 括号中的 ParentClass 用来表示继承关系 冒号不能缺少 &…
096、森林火灾模拟
森林火灾模拟 之前我们已经构建好了一些基础,但是还没有开始对火灾进行模拟。 随机生长 在原来的基础上,我们要先让树生长,即定义 grow_trees() 方法 定义方法之前,我们要先指定两个属性: 每个位置随机生长出树木的概率 每个位置随机被闪电击中的概率 为了方便,我们定义一个辅助函数来生成随机 bool 矩阵,大小与森林大小一致 按照给定的生长概率生成生长的位置,将 trees 中相应位置设为…
095、属性
属性 只读属性 只读属性,顾名思义,指的是只可读不可写的属性,之前我们定义的属性都是可读可写的,对于只读属性,我们需要使用 @property 修饰符来得到: class Leaf(object): def __init__(self, mass_mg): self.mass_mg = mass_mg # 这样 mass_oz 就变成属性了 @property def mass_oz(self):…
094、特殊方法
特殊方法 Python 使用 __ 开头的名字来定义特殊的方法和属性,它们有: __init__() __repr__() __str__() __call__() __iter__() __add__() __sub__() __mul__() __rmul__() __class__ __name__ 构造方法 __init__() 之前说到,在产生对象之后,我们可以向对象中添加属性。事实上,…
093、定义 class
定义 class 基本形式 class 定义如下: class ClassName(ParentClass): """class docstring""" def method(self): return class 关键词在最前面 ClassName 通常采用 CamelCase 记法 括号中的 ParentClass 用来表示继承关系…
092、什么是对象?
什么是对象? 在 Python 中,几乎所有的东西都是对象。 整数是对象: a = 257 type(a) int id(a) 53187032L b 和 a 是同一个对象: b = a id(b) 53187032L c = 258 id(c) 53186960L 函数: def foo(): print 'hi' type(foo) function id(foo) 636…
091、使用 OOP 对森林火灾建模
使用 OOP 对森林火灾建模 %matplotlib inline import matplotlib.pyplot as plt import numpy as np 对森林建模 class Forest(object): def __init__(self, size=(150, 150), p_sapling=0.0025, p_lightning=5.e-6, name=None): se…