{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 简介" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 属性 attributes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "属性是与对象绑定的一组数据,可以只读,只写,或者读写,使用时不加括号,例如:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "f = file(\"new_file\", 'w')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "显示模式属性:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'w'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f.mode" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "是否关闭:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f.closed" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`mode` 是只读属性,所以这样会报错:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "ename": "TypeError", "evalue": "readonly attribute", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmode\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'r'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mTypeError\u001b[0m: readonly attribute" ] } ], "source": [ "f.mode = 'r'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "获取属性不需要加括号:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "ename": "TypeError", "evalue": "'str' object is not callable", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mf\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mTypeError\u001b[0m: 'str' object is not callable" ] } ], "source": [ "f.mode()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 方法 method" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "方法是与属性绑定的一组函数,需要使用括号,作用于对象本身:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "f.write('Hi.\\n')\n", "f.seek(0)\n", "f.write('Hola!\\n')\n", "f.close()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "!rm new_file" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 使用 OPP 的原因" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 构建自己的类型来模拟真实世界的对象\n", "- 处理抽象对象\n", "- 容易复用和扩展\n", "- 理解其他 OPP 代码\n", "- GUI 通常使用 OPP 规则编写\n", "- ..." ] } ], "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 }