第九章、 类与面向对象
1)    类
基本类/超类/父类被导出类或子类继承。
Inheritance继承
Inheritance is based on attribute lookup in Python (in X.name expressions).
Polymorphism多态
In X.method, the meaning of method depends on the type (class) of X.
Encapsulation封装
Methods and operators implement behavior; data hiding is a convention by default.

  1. class C1():
  1. def __init__(self, who):
  1. self.name = who
  1. I1 = C1('bob')
  1. print I1.name #bob

2)    命名空间

  1. X = 11 # Global (module) name/attribute (X, or manynames.X)
  1. def f():
  1. print(X) # Access global X (11)
  1. def g():
  1. X = 22 # Local (function) variable (X, hides module X)
  1. print(X)
  1. class C:
  1. X = 33 # Class attribute (C.X)
  1. def m(self):
  1. X = 44 # Local variable in method (X)
  1. self.X = 55 # Instance attribute (instance.X)
  1.  
  1. print(X) # 11: module (manynames.X outside file)
  1. f() # 11: global
  1. g() # 22: local
  1. print(X) # 11: module name unchanged
  1. obj = C() # Make instance
  1. print(obj.X) # 33: class name inherited by instance
  1. obj.m() # Attach attribute name X to instance now
  1. print(obj.X) # 55: instance
  1. print(C.X) # 33: class (a.k.a. obj.X if no X in instance)
  1. #print(C.m.X) # FAILS: only visible in method
  1. #print(g.X) # FAILS: only visible in function

3)    Self参数
指向对象本身

4)    __init__构造器
如果没有__init__,则需要自己定义并赋值

  1. class C1(): # Make and link class C1
  1. def setname(self, who): # Assign name: C1.setname
  1. self.name = who # Self is either I1 or I2
  1. I1 = C1() # Make two instances,

#没有__init__,实例就是个空的命名空间

  1. I1.setname('bob') # Sets I1.name to 'bob'
  1. print(I1.name) # Prints 'bob'

构造器,创建时例时自动调用。

5)    继承搜索的方法
An inheritance search looks for an attribute first in the instance object, then in the class the instance was created from, then in all higher superclasses, progressing from the bottom to the top of the object tree, and from left to right (by default).

6)    一个例子

  1. class AttrDisplay:
  1. def gatherAttrs(self):
  1. attrs = []
  1. for key in sorted(self.__dict__):
  1. attrs.append('%s=%s' % (key, getattr(self, key)))
  1. return ', '.join(attrs)
  1. def __str__(self):
  1. return '[%s: %s]' % (self.__class__.__name__, self.gatherAttrs())
  1.  
  1. class Person(AttrDisplay): #Making Instances
  1. def __init__(self, name, job=None, pay=0): # Add defaults
  1. self.name = name # Constructor takes 3 arguments
  1. self.job = job # Fill out fields when created
  1. self.pay = pay # self is the new instance object
  1. def lastName(self): # Assumes last is last
  1. return self.name.split()[-1]
  1. def giveRaise(self, percent): # Percent must be 0..1
  1. self.pay = int(self.pay * (1 + percent))
  1.  
  1. class Manager(Person):
  1. def __init__(self, name, pay):
  1. Person.__init__(self, name, 'mgr', pay)
  1. def giveRaise(self, percent, bonus=.10):
  1. Person.giveRaise(self, percent + bonus)
  1.  
  1. if __name__ == '__main__': # Allow this file to be imported as well as run/tested
  1. bob = Person('Bob Smith')
  1. sue = Person('Sue Jones', job='dev', pay=100000)
  1. print(bob)
  1. print(sue)
  1. print(bob.lastName(), sue.lastName())
  1. sue.giveRaise(.10)
  1. print(sue)
  1. tom = Manager('Tom Jones', 50000)
  1. tom.giveRaise(.10)
  1. print(tom.lastName())
  1. print(tom)

python 教程 第九章、 类与面向对象的更多相关文章

  1. Objective-C 基础教程第九章,内存管理

    目录 Object-C 基础教程第九章,内存管理 前言: 对象生命周期 引用计数 RetainCount1项目例子 对象所有权 访问方法中的保留和释放 自动释放 所有对象放入池中 自动释放池的销毁时间 ...

  2. Python 数据分析—第九章 数据聚合与分组运算

    打算从后往前来做笔记 第九章 数据聚合与分组运算 分组 #生成数据,五行四列 df = pd.DataFrame({'key1':['a','a','b','b','a'], 'key2':['one ...

  3. Python:从入门到实践--第九章-类--练习

    #.餐馆:创建一个名为Restaurant的类,其方法_init_()设置两个属性:restaurant_name和cuisine_type. #创建一个名为describe_restaurant的方 ...

  4. 《JS权威指南学习总结--第九章 类和模板》

    内容要点: 一. 1.第六章详细介绍了JS对象,每个JS对象都是一个属性集合,相互之间没有任何联系.在JS中也可以定义对象的类,让每个对象都共享某些属性,这种"共享"的特性是非常有 ...

  5. python 教程 第一章、 简介

    第一章. 简介 官方介绍: Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使 ...

  6. Flask 教程 第九章:分页

    本文翻译自The Flask Mega-Tutorial Part IX: Pagination 这是Flask Mega-Tutorial系列的第九部分,我将告诉你如何对数据列表进行分页. 在第八章 ...

  7. Python 【第九章】 Django基础

    在windows 命令行上安装Django 在CMD命令行中输入以下命令进行安装. pip install Django 在windows python安装目录上会出现 一个django-admin. ...

  8. C#图解教程 第九章 语句

    语句 什么是语句控制流语句if语句if-else语句while循环do循环for循环 for语句中变量的作用域初始化和迭代表达式中的多表达式 switch语句 分支示例switch语句补充分支标签 跳 ...

  9. 进击的Python【第九章】:paramiko模块、线程与进程、各种线程锁、queue队列、生产者消费者模型

    一.paramiko模块 他是什么东西? paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 先来个实例: import param ...

随机推荐

  1. Android App优化之延长电池续航时间

    禁用广播接收器 确保广播接收器在真正须要时才运行指令,在onResume中当中广播接收器,在onPause中禁用. 在manifest文件里声明广播接收器时,事先默认配置成禁用的 <receiv ...

  2. ios 获取button所在的cell对象, 注意:ios7 =&lt; System Version &lt; ios8 获取cell对象的差别

    ios7 =< System Version< ios8 : ios7 =< System Version < ios8  下 button.superview.supervi ...

  3. php 下载服务器上存在的文件 到本地

    Header("Location: http://www.weiyunyi.com/Public/youbu_score_template.xls");

  4. 浅谈struts2的国际化----i18n

    可能大家在使用struts框架的时候,偶尔会看到这个词: i18n.也就是 Internationalization    i 开头,n 结尾. 总共18个字母,今天的主要内容就是环绕这 四个字母. ...

  5. SRA解密报错:Data must start with zero

    项目背景:要对打印地址进行加密,用公钥加密后会乱码需要base64 decode一下,但是在解密时报错:javax.crypto.BadPaddingException: Data must star ...

  6. COCOS学习笔记--单点触控

    这篇博客来总结下cocos单点触控的相关内容: 我们在Layer类的源代码中能够看到.Layer类提供了一下4个与屏幕单点触控相关的回调方法: onTouchBegan().onTouchMoved( ...

  7. [SCSS] Organize SCSS into Multiple Files with Partials

    Tired of dealing with monolithic CSS files? Are requests for multiple CSS files hurting your perform ...

  8. [经典面试题]k节点一组旋转链表

    [题目] 给出一个链表和一个数k,比方链表1→2→3→4→5→6.k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4.翻转后4→3→2→1→5→6. 假设节点的数 ...

  9. html5常用标签table表格布局

    html5常用标签table表格布局 一.总结 一句话总结: 二.html5常用标签table表格布局 用表格显示信息调理清楚,使浏览者一目了然.表格在网页中还有协助布局的作用,可以把文字.图像等组织 ...

  10. 【u220】生日礼物

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 一对双胞胎兄妹同一天过生日,这一天,他们的朋友给他俩送来了礼物,每个人送的礼物都是2本书,一本给哥哥, ...