{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 接口" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在 `Python` 中,鸭子类型(`duck typing`)是一种动态类型的风格。所谓鸭子类型,来自于 `James Whitcomb Riley` 的“鸭子测试”:\n", "\n", "> 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。\n", "\n", "假设我们需要定义一个函数,这个函数使用一个类型为鸭子的参数,并调用它的走和叫方法。\n", "\n", "在鸭子类型的语言中,这样的函数可以接受任何类型的对象,只要这个对象实现了走和叫的方法,否则就引发一个运行时错误。换句话说,任何拥有走和叫方法的参数都是合法的。\n", "\n", "先看一个例子,父类:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class Leaf(object):\n", " def __init__(self, color=\"green\"):\n", " self.color = color\n", " def fall(self):\n", " print \"Splat!\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "子类:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class MapleLeaf(Leaf):\n", " def fall(self):\n", " self.color = 'brown'\n", " super(MapleLeaf, self).fall()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "新的类:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class Acorn(object):\n", " def fall(self):\n", " print \"Plunk!\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "这三个类都实现了 `fall()` 方法,因此可以这样使用:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Splat!\n", "Splat!\n", "Plunk!\n" ] } ], "source": [ "objects = [Leaf(), MapleLeaf(), Acorn()]\n", "\n", "for obj in objects:\n", " obj.fall()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "这里 `fall()` 方法就一种鸭子类型的体现。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "不仅方法可以用鸭子类型,属性也可以:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "from scipy.ndimage.measurements import label\n", "\n", "class Forest(object):\n", " \"\"\" Forest can grow trees which eventually die.\"\"\"\n", " def __init__(self, size=(150,150), p_sapling=0.0025):\n", " self.size = size\n", " self.trees = np.zeros(self.size, dtype=bool)\n", " self.p_sapling = p_sapling\n", " \n", " def __repr__(self):\n", " my_repr = \"{}(size={})\".format(self.__class__.__name__, self.size)\n", " return my_repr\n", " \n", " def __str__(self):\n", " return self.__class__.__name__\n", " \n", " @property\n", " def num_cells(self):\n", " \"\"\"Number of cells available for growing trees\"\"\"\n", " return np.prod(self.size)\n", " \n", " @property\n", " def losses(self):\n", " return np.zeros(self.size)\n", " \n", " @property\n", " def tree_fraction(self):\n", " \"\"\"\n", " Fraction of trees\n", " \"\"\"\n", " num_trees = self.trees.sum()\n", " return float(num_trees) / self.num_cells\n", " \n", " def _rand_bool(self, p):\n", " \"\"\"\n", " Random boolean distributed according to p, less than p will be True\n", " \"\"\"\n", " return np.random.uniform(size=self.trees.shape) < p\n", " \n", " def grow_trees(self):\n", " \"\"\"\n", " Growing trees.\n", " \"\"\"\n", " growth_sites = self._rand_bool(self.p_sapling)\n", " self.trees[growth_sites] = True \n", " \n", " def advance_one_step(self):\n", " \"\"\"\n", " Advance one step\n", " \"\"\"\n", " self.grow_trees()\n", "\n", "class BurnableForest(Forest):\n", " \"\"\"\n", " Burnable forest support fires\n", " \"\"\" \n", " def __init__(self, p_lightning=5.0e-6, **kwargs):\n", " super(BurnableForest, self).__init__(**kwargs)\n", " self.p_lightning = p_lightning \n", " self.fires = np.zeros((self.size), dtype=bool)\n", " \n", " def advance_one_step(self):\n", " \"\"\"\n", " Advance one step\n", " \"\"\"\n", " super(BurnableForest, self).advance_one_step()\n", " self.start_fires()\n", " self.burn_trees()\n", " \n", " @property\n", " def losses(self):\n", " return self.fires\n", " \n", " @property\n", " def fire_fraction(self):\n", " \"\"\"\n", " Fraction of fires\n", " \"\"\"\n", " num_fires = self.fires.sum()\n", " return float(num_fires) / self.num_cells\n", " \n", " def start_fires(self):\n", " \"\"\"\n", " Start of fire.\n", " \"\"\"\n", " lightning_strikes = (self._rand_bool(self.p_lightning) & \n", " self.trees)\n", " self.fires[lightning_strikes] = True\n", " \n", " def burn_trees(self): \n", " pass\n", " \n", "class SlowBurnForest(BurnableForest):\n", " def burn_trees(self):\n", " \"\"\"\n", " Burn trees.\n", " \"\"\"\n", " fires = np.zeros((self.size[0] + 2, self.size[1] + 2), dtype=bool)\n", " fires[1:-1, 1:-1] = self.fires\n", " north = fires[:-2, 1:-1]\n", " south = fires[2:, 1:-1]\n", " east = fires[1:-1, :-2]\n", " west = fires[1:-1, 2:]\n", " new_fires = (north | south | east | west) & self.trees\n", " self.trees[self.fires] = False\n", " self.fires = new_fires\n", "\n", "class InstantBurnForest(BurnableForest):\n", " def burn_trees(self):\n", " # 起火点\n", " strikes = self.fires\n", " # 找到连通区域\n", " groves, num_groves = label(self.trees)\n", " fires = set(groves[strikes])\n", " self.fires.fill(False)\n", " # 将与着火点相连的区域都烧掉\n", " for fire in fires:\n", " self.fires[groves == fire] = True\n", " self.trees[self.fires] = False\n", " self.fires.fill(False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "测试:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "forest = Forest()\n", "b_forest = BurnableForest()\n", "sb_forest = SlowBurnForest()\n", "ib_forest = InstantBurnForest()\n", "\n", "forests = [forest, b_forest, sb_forest, ib_forest]\n", "\n", "losses_history = []\n", "\n", "for i in xrange(1500):\n", " for fst in forests:\n", " fst.advance_one_step()\n", " losses_history.append(tuple(fst.losses.sum() for fst in forests))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "显示结果:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAl0AAAFwCAYAAACCWM5eAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8VFX+//HXSSUJARJKMEAoShGkKaCgSBR0UbH/pCjY\n+NpWLKy6iq6IrmVVwF1dsSJFFBHXNQqKLGAQlGKjCAKihppQA0kgbZL7++PmztyZzKRMvTP5PB+P\nPGbmZubekzDceedzzj1HaZqGEEIIIYQIrKhQN0AIIYQQoiGQ0CWEEEIIEQQSuoQQQgghgkBClxBC\nCCFEEEjoEkIIIYQIAgldQgghhBBBUGPoUkq9o5Q6oJTabNo2QCm1Xin1k1LqO6VUf9P3JimlflVK\nbVNKXRzIhgshhBBChJPaKl2zgOEu214AHtc0rS8wueoxSqnuwCige9VrZiilpJImhBBCCEEtoUvT\ntFVAvsvmXKBp1f1mwL6q+1cC8zVNK9c0LQfYCQzwX1OFEEIIIcJXjBeveQRYrZSaih7aBlZtTwfW\nmp63F2jjW/OEEEIIISKDN91/M4F7NU3LACYC79TwXFljSAghhBAC7ypdAzRNG1Z1/yPg7ar7+4B2\npue1xdH1aKeUkiAmhBBCiLChaZryx368qXTtVEoNqbp/IbCj6v6nwGilVJxSqiPQGVjvbgeapsmX\ny9cTTzwR8jZY8Ut+L/J7CcrvZOpUtF9+CfnPYLnfSwR/ye9Ffi91/fKnGitdSqn5wBCghVJqD/rV\nircDryql4oHiqsdomrZVKfUhsBWwAX/W/N1aIYQIhAcfhJ074bXXQt0SIUQEqzF0aZo2xsO3zvbw\n/GeBZ31tlBBCBJ3yS++BEEJ4JPNoWURmZmaom2BJ8ntxT34v1cnvxD35vbgnvxf35PcSWCrYPYBK\nKel1FEJYi1Jw993w73+HuiVCCItRSqH5aSC9N1cvCiFE5JHuxbCi5N9LBECgi0ISuoQQQoQl6TUR\n/hSMIC9juoQQAqTSJYQIOAldQggBErqEEAEnoUsIIYQQIggkdAkhBEilSwgRcBK6hBACJHQJv+nQ\noQOJiYkkJyeTnJxMkyZNyMvLC8qxMzMzmTlzZlCOJepPQpcQQgjhR0opFi1aRGFhIYWFhRQUFNC6\ndes6v95ms/l0bGFdErqEEAKk0iUCqrS0lPvvv582bdrQpk0bJk6cSFlZGQDZ2dm0bduWF154gVNO\nOYXx48ejaRr/+Mc/OO2002jRogWjRo0iPz8fgJKSEsaOHUuLFi1ISUlhwIABHDx4kMcee4xVq1Yx\nYcIEkpOTuffee0P5Iws3JHQJIQRI6BJ+5TqH2DPPPMP69evZuHEjGzduZP369Tz99NP27x84cID8\n/Hx2797NG2+8wcsvv8ynn37K119/TW5uLikpKdx9990AzJkzh4KCAvbu3cvRo0d54403SEhI4Jln\nnmHw4MG8+uqrFBYW8vLLLwf1Zxa1k9AlhBAgoUv4jaZpXHXVVaSkpJCSksLVV1/N+++/z+TJk2nR\nogUtWrTgiSee4N1337W/JioqiieffJLY2FgaNWrEG2+8wdNPP016ejqxsbE88cQTfPTRR1RUVBAX\nF8eRI0f49ddfUUrRt29fkpOTnY4vrElmpBdCCJDQFYH89U9a3wyjlCIrK4sLL7zQvi0xMZH27dvb\nH2dkZLB//37745YtWxIXF2d/nJOTw9VXX01UlKM2EhMTw8GDBxk3bhx79uxh9OjRHDt2jLFjx/LM\nM88QExNjP76wJql0CSEESOiKQJrmny9/SE9PJycnx/549+7dpKen2x+7BqWMjAyWLFlCfn6+/evk\nyZOccsopxMTEMHnyZLZs2cK3337LokWLmDt3rtv9CGuR0CWEECChSwTUmDFjePrppzl8+DCHDx/m\nqaeeYty4cR6ff+edd/Loo4+ye/duAA4dOsSnn34K6APvN2/eTEVFBcnJycTGxhIdHQ1AWloav/32\nW+B/IOEVCV1CCCFEgP3tb3+jX79+9OrVi169etGvXz/+9re/2b/vWqG67777uOKKK7j44otp0qQJ\nAwcOZP369QDk5eVx3XXX0bRpU7p3705mZqY9wN1333189NFHpKamcv/99wfvBxR1ooI94E4ppckg\nPyGEpSgFDz8M//hHqFsi6kgpJQPGhV95ek9VbfdLKVwqXUIIAdK9KIQIOAldQgghhBBBIKFLCCFA\nKl1CiICT0CWEECChSwgRcBK6hBBCCCGCQEKXEEKAVLqEEAEnoUsIIUBClxAi4CR0CSEESOgSQgSc\nhC4hRMNWWRnqFggREDk5OURFRVHp4T0+ZcqUGpciEv4noUsI0bBVVOi3Er6En3To0IHExESSk5NJ\nTU1lxIgR7N27N9TNqqY+i2NnZmaSkJBAcnKy/WvdunUBbJ2zm2++mccffzxoxwuUGkOXUuodpdQB\n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\nnQp2LlJKSRYTQoSe6wfIXXfBjBmhaYuoN6VURAysFtbh6T1Vtd0v/Zsyj5YQQgwbBvIBLoQIMAld\nQgjRv790LwohAk5ClxBCNG4soUsIEXASuoQQQkKXECIIJHQJIURSkoQuIUTASegSQoiYGAldQoiA\nk9AlhBBRURK6hBABJ6FLCCGio8FmC3UrhBARTkKXEKJhW7YMEhKguDjULRENwOzZsxk8eHComyFC\nREKXEKJhi4uDxEQJXcKvVq9ezaBBg2jWrBnNmzfnvPPO4/vvvw/IsTp06EBiYiLJycmkpqYyYsQI\n9u7dG5BjAdx8883Ex8eTnJxs/zLWTwyGKVOmMG7cuKAdz58kdAkhGra4OL3SdfJkqFsiIkRBQQEj\nRozgvvvuIz8/n3379vHEE08QHx8fkOMppVi0aBGFhYXk5uaSlpbGPffc49W+bHXoZldK8fDDD1NY\nWGj/uu666/x+nEgkoUsI0bDFxEilS/jVjh07UEoxatQolFI0atSIiy66iJ49e1Z77rfffkv//v1p\n1qwZAwYMYM2aNQB89dVX9OrVy/68iy66iAEDBtgfDx48mE8//bTa/uLj47n22mvZunWrfVtmZiYz\nZ860P3bt4oyKimLGjBl07tyZrl27snLlStq2bcv06dNJS0sjPT2d2bNn1+lnf+utt+jcuTPNmzfn\nyiuvJDc31+NxABYtWkSfPn1ISUnh3HPPZfPmzfbnP//887Rt25YmTZrQrVs3VqxYwZIlS3juuedY\nsGABycnJ9O3bt07tsgoJXUKIhi02Vipdwq+6du1KdHQ0N998M0uWLCE/P9/t844ePcpll13G/fff\nz9GjR/nLX/7CZZddRn5+Pueccw6//vorR48epby8nE2bNpGbm8uJEycoLi7mhx9+cApOxkLNJ0+e\nZMGCBQwcOND+PaUUynWBdxdZWVl89913bN26FU3TOHDgAAUFBezfv5+ZM2dy9913c/z48WrHM1ux\nYgWPPvooCxcuJDc3l/bt2zN69GiPx/npp58YP348b731FkePHuWOO+7giiuuoLy8nO3bt/Pqq6/y\n/fffU1BQwNKlS+nQoQPDhw/n0UcfZfTo0RQWFvLTTz/V/g9iIRK6hBANm1HpktAl/CQ5OZnVq1ej\nlOK2226jVatWXHnllRw8eNDpeYsXL6Zr167ccMMNREVFMXr0aLp168ann35KQkIC/fv3Z+XKlfzw\n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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "plt.figure(figsize=(10,6))\n", "\n", "plt.plot(losses_history)\n", "plt.legend([f.__str__() for f in forests])\n", "\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }