一、专有词汇

  • 类(class):告诉python创建新类型的东西。
  • 对象(object):两个意思,即最基本的东西,或者某样东西的实例。
  • 实例(instance):让python创建一个类时得到的东西。
  • def:在类中定义函数。
  • self:在类的函数中,self指代被访问的对象或实例的一个变量。
  • 继承(inheritance):指一个类可以继承另一个类的特性,和父子关系类似。
  • 组合(composition):指一个类可以将别的类作为它的部件构建起来。
  • 属性(attribute):类的一个属性,它来自于组合,而且通常是一个变量。
  • 是什么(is-a):用来描述继承关系。
  • 有什么(has-a):用来描述某个东西是由另一些东西组成的,或者某个东西有某个特征。

  二、措辞练习

  • class X(Y):创建一个叫X的类,它是Y的一种。
  • class X(object):  def __init__(self, J):类X有一个叫__init__的函数,它以self和J为参数。
  • class X(object):  def M(self, J):类X有一个叫M的函数,它以self和J为参数。
  • foo = X():将foo设为类X的一个实例。
  • foo.M(J):从foo中找到M函数,并使用self和J函数调用它。
  • foo.K = Q:从foo中获取K属性,并将其设置为Q

  三、练习用代码

  1. import random
  2. from urllib.request import urlopen
  3. import sys
  4.  
  5. WORD_URL = "http://learncodethehardway.org/words.txt"
  6. WORDS = []
  7.  
  8. PHRASES = {
  9. "class %%%(%%%):":
  10. "Make a class named %%% that is-a %%%.",
  11. "class %%%(object):\n\tdef __init__(self, ***)":
  12. "class %%% has-a __init__ that takes self and *** params.",
  13. "class %%%(object):\n\tdef ***(self, @@@)":
  14. "class %%% has-a function *** that takes self and @@@ params.",
  15. "*** = %%%()":
  16. "Set *** to an instance of class %%%.",
  17. "***.***(@@@)":
  18. "From *** get the *** function, call it with params self, @@@.",
  19. "***.*** = '***'":
  20. "From *** get the *** attribute and set it to '***'."
  21. }
  22.  
  23. # do they want to drill phrases first
  24. if len(sys.argv) == 2 and sys.argv[1] =="english":
  25. PHRASES_FIRST = True
  26. else:
  27. PHRASES_FIRST = False
  28.  
  29. # load up the words from the website
  30. for word in urlopen(WORD_URL).readlines():
  31. WORDS.append(str(word.strip(),encoding="utf-8"))
  32.  
  33. def convert(snippet, phrase):
  34. class_names = [w.capitalize() for w in
  35. random.sample(WORDS, snippet.count("%%%"))]
  36. other_names = random.sample(WORDS, snippet.count("***"))
  37. results = []
  38. param_names = []
  39.  
  40. for i in range(0, snippet.count("@@@")):
  41. param_count = random.randint(1,3)
  42. param_names.append(', '.join(
  43. random.sample(WORDS, param_count)))
  44.  
  45. for sentence in snippet, phrase:
  46. result = sentence[:]
  47.  
  48. # fake class class_names
  49. for word in class_names:
  50. result = result.replace("%%%", word, 1)
  51.  
  52. # fake other class_names
  53. for word in other_names:
  54. result = result.replace("***", word, 1)
  55.  
  56. # fake parameter lists
  57. for word in param_names:
  58. result = result.replace("@@@", word, 1)
  59.  
  60. results.append(result)
  61.  
  62. return results
  63.  
  64. # keep going until they hit CTRL+D
  65. try:
  66. while True:
  67. snippets = list(PHRASES.keys())
  68. random.shuffle(snippets)
  69.  
  70. for snippet in snippets:
  71. phrase = PHRASES[snippet]
  72. question, answer = convert(snippet, phrase)
  73. if PHRASES_FIRST:
  74. question, answer = answer, question
  75.  
  76. print(question)
  77.  
  78. input("> ")
  79. print(f"ANSWER: {answer}\n\n")
  80. except EOFError:
  81. print("\nBye.")

  四、阅读更多代码

  找到更多的代码,用前述措辞阅读,找到所有带类的文件,然后完成下列步骤:

  1. 针对每一个类,指出它的名称,以及它是继承于哪些类的。

  2. 列出每个类中的所有函数,以及这些函数的参数。

  3. 列出类中用在self上的所有属性。

  4. 针对每一个属性,指出它是来自哪个类。

【Python基础】lpthw - Exercise 41 学习面向对象术语的更多相关文章

  1. python基础-------python2.7教程学习【廖雪峰版】(二)

    2017年6月7日14:59:27任务:    看完python基础1.计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文 ...

  2. Python基础入门(6)- 面向对象编程

    1.初识面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本篇随笔将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象 ...

  3. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

  4. <<Python基础课程>>学习笔记 | 文章13章 | 数据库支持

    备注:本章介绍了比较简单,只是比较使用样品,主要假设是把握连接,利用数据库.和SQLite做演示样本 ------ Python数据库API 为了解决Python中各种数据库模块间的兼容问题,如今已经 ...

  5. Python基础5 常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...

  6. <<Python基础教程>>学习笔记 | 第10章 | 充电时刻

    第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...

  7. Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类

    一.前提回忆: 1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均 ...

  8. Py修行路 python基础 (十六)面向对象编程的 继承 多态与多态性 封装

    一.继承顺序: 多继承情况下,有两种方式:深度优先和广度优先 1.py3/py2 新式类的继承:在查找属性时遵循:广度优先 继承顺序是多条分支,按照从左往右的顺序,进行一步一步查找,一个分支走完会走另 ...

  9. Python基础(18)_面向对象程序设计2(反射、__str__、__del__、__item__系列)

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object) ...

随机推荐

  1. JAVA进阶13

    间歇性混吃等死,持续性踌躇满志系列-------------第13天 1.查看线程的运行状态 package code0327; class Demo01 implements Runnable { ...

  2. 两个同级div重叠的情况

    一个div使用了position,自身脱离了文本流,另一个顶上去.

  3. Xpath初了解

    如下一段html: <html> <body> <form id="loginForm"> <input name="usern ...

  4. redis/memcache监控管理工具——treeNMS

    TreeNMS可以帮助您搭建起一套用于redis的监控管理系统,也支持Memcached,让您可以通过web的方式对数据库进行管理,有了它您就可以展示NOSQL数据库.编辑修改内容,另外还配备了sql ...

  5. Solidity构造函数和析构函数

    构造函数:当方法名字和合约名字相同的时候,这个就是构造函数,构造函数在合约对象创建之后执行的 contract Person{ function Peron(){//构造函数Person ... } ...

  6. SQLAlchemy 使用(一)创建单一model

    前言 最近项目等待前端接接口,比较空闲.就想学习一些新东西.学啥呢?考虑到ORM的易用性,还是学习一下ORM.那么与Flask搭配的ORM有 flask-sqlalchemy 但是该组件专为Flask ...

  7. vue-地址插件 v-region

    demo地址:https://terryz.gitee.io/vue/#/region/demo

  8. CSS之分组选择器和嵌套选择器

    分组选择器, 将一个样式应用于多个类,或者标签啥的 每个选择器用逗号隔开 <!DOCTYPE html> <html> <head> <meta charse ...

  9. 金蝶KIS&K3助记码SQL数据库批量刷新

    金蝶KIS&K3助记码SQL数据库批量刷新 用的次数不多,就没有写入存储过程或者触发里面了,可以自行实现. 第一步选择对应账套的数据库,执行下面的命令,这个是一个函数. go if exist ...

  10. @PathVariable出现点号"."时导致路径参数截断获取不全的解决办法

    @PathVariable出现点号"."时导致路径参数截断获取不全的解决办法 比如,我路径是/test/{name},name的值是1.2.3.4,后台用@PathVariable ...