{ "metadata": { "name": "module-class-object" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# \u6a21\u5757(module), \u7c7b(class)\u548c\u5bf9\u8c61(object)\n", "\n", "\u672c\u8282\u5185\u5bb9\u53ef\u4ee5\u53c2\u8003\u8bfe\u672c[\u7ec3\u4e6040](http://learnpythonthehardway.org/book/ex40.html).\n", "\n", "## \u6a21\u5757\n", "\n", "\u6a21\u5757\u5c31\u662fPython\u811a\u672c\u6587\u4ef6. \u6bd4\u5982\u65b0\u5efa\u4e00\u4e2a\u6587\u4ef6`counter.py`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "value = 0\n", "step = 1\n", "\n", "def increase():\n", " global value\n", " value += step" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u5728\u540c\u4e00\u7ea7\u76ee\u5f55\u7684\u5176\u5b83\u811a\u672c\u91cc, \u6216\u8005IPython notebook\u91cc, \u6211\u4eec\u53ef\u4ee5import\u8fd9\u4e2a\u6a21\u5757:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import counter\n", "print counter.value\n", "counter.increase()\n", "print counter.value" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0\n", "1\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u6a21\u5757\u5c06\u6570\u636e\u548c\u51fd\u6570\u6253\u5305\u5728\u4e00\u8d77, \u4f7f\u5f97\u5916\u754c\u53ef\u4ee5\u65b9\u4fbf\u5730\u4f7f\u7528\u5176\"\u6210\u5458\"\u51fd\u6570\u6539\u53d8\u5176\u4e2d\u7684\u6570\u636e. \u4f46\u662f\u6a21\u5757\u53ea\u80fdimport\u4e00\u6b21, \u540e\u7eed\u7684import\u4e0d\u4f1a\u91cd\u65b0\u521d\u59cb\u5316\u8be5\u6a21\u5757(\u7528\u4e00\u4e9bhack\u7684\u65b9\u6cd5\u53ef\u4ee5\u91cd\u590dimport):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import counter\n", "print counter.value" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## \u7c7b\n", "\n", "\u4e00\u4e2a\u7c7b\u76f8\u5f53\u4e8e\u4e00\u4e2aPython\u811a\u672c, \u5373\u4e00\u4e2a\u6a21\u5757:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Counter(object):\n", " \n", " def __init__(self):\n", " self.value = 0\n", " self.step = 1\n", " \n", " def increase(self):\n", " self.value += self.step" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u5176\u4e2d\u6570\u636e\u5728\u7279\u6b8a\u51fd\u6570`__init__`\u4e2d\u5b9a\u4e49, \u800c\u51fd\u6570\u5219\u5728`class`\u7684\u4e0b\u4e00\u7ea7\u5b9a\u4e49." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## \u5bf9\u8c61\n", "\n", "\u6a21\u5757\u9700\u8981import\u624d\u80fd\u4f7f\u7528, \u7c7b\u5219\u9700\u8981\u5b9e\u4f8b\u5316(instantiate). \u6240\u8c13\u5b9e\u4f8b\u5316\u5c31\u662f\u521b\u5efa(create)\u7684\u610f\u601d. \u5b9e\u9645\u4e0a\u5c31\u662f\u8c03\u7528\u4e86`__init__`\u51fd\u6570, \u5206\u914d\u4e00\u5757\u5185\u5b58\u5e76\u547d\u540d\u4e3a`self`, \u518d\u521d\u59cb\u5316\u5176\u4e2d\u7684\u6570\u636e." ] }, { "cell_type": "code", "collapsed": false, "input": [ "counter = Counter()\n", "print counter.value\n", "counter.increase()\n", "print counter.value" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0\n", "1\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u4e0e\u6a21\u5757\u4e0d\u540c, \u7c7b\u53ef\u4ee5\u591a\u6b21\u5b9e\u4f8b\u5316, \u800c\u6a21\u5757\u53ea\u80fdimport\u4e00\u6b21:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "c1 = Counter()\n", "print c1.value\n", "c1.increase()\n", "print c1.value\n", "c2 = Counter()\n", "print c2.value" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0\n", "1\n", "0\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "\u7c7b\u4e0e\u6a21\u5757\u7684\u53e6\u4e00\u4e2a\u4e0d\u540c\u4e4b\u5904\u5728\u4e8e\u7c7b\u53ef\u4ee5\u6307\u5b9a\u5176\u521d\u59cb\u5316\u65b9\u5f0f:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Counter(object):\n", " \n", " def __init__(self, step=1):\n", " self.value = 0\n", " self.step = step\n", " \n", " def increase(self):\n", " self.value += self.step\n", " \n", "counter = Counter(2)\n", "print counter.value\n", "counter.increase()\n", "print counter.value" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0\n", "2\n" ] } ], "prompt_number": 7 } ], "metadata": {} } ] }