模块、类和对象

  • 习题 40
    • 概要:
    • 代码如下:
    • 结果输出:
  • 习题41
    • 代码如下:
  • 习题42
    • 代码如下:

习题 40

概要:

# 模块、类和对象
'''
python是面向对象编程语言、
通过class(类)的结构,用特殊的方式构造软件
使用类可以加强程序的一致性
'''
'''
模块和字典差不多,这是将一个东西映射到另外一个东西的方式,这意味着,
如果你有一个字典,有’apple‘的键(key),而你从key取值value需要:
'''
mystuff={'apple':'I AM APPLES!'}
print(mystuff['apple'])
'''
注意:从Y取X的概念,再看module,
- module包含了函数和变量的python文件
- 可以导入这个文件
- 使用.操作访问module的函数和变量
'''
# this goes in mystuff.py
def apple():print("I AM APPLES!")import mystuff
mystuff.apple()
'''还可以将tangerine的变量放到module里'''
def apple():print("I AM APPLES!")
#this is just a variable
tangerine="Living reflections of a dream"
'''同样,还是可以访问这个变量'''
import mystuffmystuff.apple()
print(mystuff.tangerine)
'''回到字典的概念,module与字典的使用方式相似,只不过语法不同'''
mystuff['apple']#get apple from dict
mystuff.apple()#get apple from the module
mystuff.tangerine#same things,it's just a variable
'''python的常用模式
- 键=值
- 通过键的名称获取其中的值
对于字典来说,key是一个字符串,获得值的语法是[key]
对于模块来说,key是函数或者变量的名称,而语法是“.key”
'''
class Mystuff(object):def_init_(self):self.tangerine="And now a thousand years between"def apple(self):print("I AM CLASSY APPLES!")
'''
对象(object)与import差不多,实例化(instantiate)
也就是,创建的意思
将类实例化,就会得到对象,像调用函数一样调用类
'''thing=Mystuff()#实例化,与调用函数很相似
thing.apple()
print(thing.tangerine)
'''
- python查找Mystuff()就会知道,Mystuff()是你定义的类
- python创建了一个空对象,里面包含了你在该类用def指定的所有函数
- python会去检查你是不是在里面创建了_init_函数,如果有创建,就会调用函数,从而对你新创建的空对象实现了初始化
- 在Mystuff的_int_函数里,有一个多余的函数self,这就是python为你创建的空对象,而你可以对self进行module,dict等操作,为self设置变量
- python将这个新建的对象赋给thing变量,以供后面使用
'''
'''
- 类就像一种蓝图或者一种预定的东西,通过类创建新的迷你module
- 实例化的过程相当于你创建了一个迷你模块,而且同时导入了它;实例化:从类创建一个对象
- 结果创建的迷你模块就是一个对象,可以将它赋给一个变量,以供后面操作
'''
# dict style
mystuff['apple']
#moudle stuyle
mystuff.apple()
print(mystuff.tangerine)
#class style
thing=Mystuff
thing.apples()
print(thing.tangrine)

代码如下:

'''第一个类的例子'''
class Song(object):def __init__(self,lyrics):self.lyrics=lyricsdef sing_me_a_song(self):for line in self.lyrics:print(line)
happy_bday=Song(["Happy birthday to you","I don't want to get sued","So,I'll stop right there"])bulls_on_parade=Song(["They rally around the family","With pockets full of shells"])happy_bday.sing_me_a_song()
bulls_on_parade.sing_me_a_song()'''为什么创建__init__或者别的类函数时需要多加一个self变量?
如果不加self,cheese='Frank'的代码没有歧义,既可能是实例的cheese属性,也可能是一个叫做cheese的局部变量
有了self.cheese='Frank'就清楚的知道这指的是实例的属性self.cheese
'''

结果输出:

Happy birthday to you
I don't want to get sued
So,I'll stop right there
They rally around the family
With pockets full of shells进程已结束,退出代码0

习题41

代码如下:

'''
类(class):告诉python创建新类型的东西
对象(object):两个意思,即最基本的东西,或者某样东西的实例
实例(instance):python创建一个类时得到的东西
def:这是在类里定义函数的方法
self:在类的函数中,self指被访问的对象或实例的一个变量
继承(inheritance):指一个类可以继承另一个类的特性,与父子关系类似
组合(composition):指一个类可以将识别的类作为它的部件构建起来,有点像车子和车轮的关系
属性(attribute):类的属性,来自于组合,而且通常是一个变量
是什么(is-a):用来描述继承关系,,如Salmon is_a Fish
有什么(has-a):用来描述某个东西是由另外一个东西组成的,或者某个东西有某个特征,,如Salomon has_a mouth
'''
'''
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
'''
import random
from urllib.request import urlopen
import sysWORD_URL="http://learncodethehardway.org/words.txt"
WORDS=[]PHRASES= {"class %%%(%%%)":"make a class named % % % that is-a %%%.","class %%%(object):\n\t def __init__(self,***)":'class %%% has-a __init__ that takes self and *** params.','class %%% (object):\n\t def ***(self,@@@)':"class % % % has_a function *** that takes self and *** params.","***=%%%()":"set *** to an instance of class %%%.","***.***(@@@)":"from *** get the *** function, call it with params self,@@@.","***.***='***'":"from *** get the *** attribute and set it to '***'."
}
#do they want to drill phrases first
if len(sys.argv)==2 and sys.argv[1]=="english":PHRASES_FIRST=True
else:PHRASES_FIRST=False
#load up the words from the website
for word in urlopen(WORD_URL).readlines():WORDS.append(str(word.strip(),encoding="utf-8"))
def convert(snippet,phrase):class_names=[w.capitalize()for w inrandom.sample(WORDS,snippet.count("%%%"))]other_names=random.sample(WORDS,snippet.count("%%%"))results=[]param_names=[]for i in range(0,snippet.count("@@@")):param_count=random.randint(1,3)param_names.append(','.join(random.sample(WORDS,param_count)))for sentence in snippet,phrase:result=sentence[:]#fake class namesfor word in class_names:results=result.resplace("%%%",word,1)#fake other namesfor word in other_names:results=result.resplace("***",word,1)#fake parameter listsfor word in param_names:results=result.resplace("@@@",word,1)results.append(result)return results#Keep going until they hit CTRL-Dtry:while True:snippets=list(PHRASES.keys())random.shuffle(snippets)for snippet in snippets:phrase=PHRASES[snippets]question,answer=convert(snippet,phrase)if PHRASES_FIRST:question,answer=answer,questionprint(question)input(">")print(f"ANSWER:{answer}\n\n")except EOFError:print("\nBey")
'''
result=sentence[:]是什么意思?
python复制列表的方法,你正在使用“列表切片(list slicing)”语法[:]对列表中的所有元素进行切片操作
'''

习题42

代码如下:

#对象、类和从属关系
'''
is-a(是什么)两者以类的关系相互关联
has-a(有什么)两者无共同点,仅是互为参照
'''
## Animal is-a object (yes,sort of confusing) look at the extra credit
class Animal(object):pass
class Dog(Animal):def __init__(self,name):self.name=nameclass Cat(Animal):def __init__(self,name):self.name=nameclass Person(object):def __init__(self,name):self.name=name##Person has-a pet of some kindself.pet=Noneclass Employee(Person):def __init__(self,name,salary):
#??hmm,what is this strange magic?super(Employee,self).__init__(name)self.salary=salaryclass Fish(object):pass
class Salmon(Fish):pass
class Halibut(Fish):pass
#rover is-a Dog
rover=Dog("rover")
satan=Cat("Satan")
mary=Person("Mary")
mary.pet=satan
frank=Employee("Frank",120000)
frank.pet=rover
flipper=Fish()
crouse=Salmon()
harry=Halibut()

笨方法学python40-42相关推荐

  1. 笨方法学python 42课笔记:物以类聚

    代码1: class TheThing(object):def __init__(self):self.number = 0def some_function(self):print "I ...

  2. 《 笨方法学 Python 》_ 目录

    < 笨方法学 Python >(第 3 版)书中代码是 Python 2 版本,本着学习 Python 3 的目的,用 Python 3 完成本书的习题,代码也已上传到 Github. 作 ...

  3. 笨方法学python6-10

    习题6:字符串和文本 作者提示: 1.尝试破坏代码 然后自己去修复. 代码 type_of_people = 10 #变量赋予 x=f"There are {type_of_people} ...

  4. 笨方法学python习题4

    变量和命名 #笨方法学python_习题4#定义变量 cars = 100 space_in_a_car = 4.0 drivers = 30 passengers = 90#计算 cars_not_ ...

  5. 笔记 | 笨方法学Python

    整理 | 阿司匹林 出品 | 人工智能头条(公众号ID:AI_Thinker) Python 有多好应该不用多说了,毕竟它是"钦定的"最接近 AI 的语言.(当然,PHP 才是最好 ...

  6. 笨方法学Python(二)

    笨方法学Python,习题16 - 21 版本:3.8.0 编辑器:Visual Studio Code 习题16到21讲的是文件的读写和函数的基础,可以通过一个实例来同时练习他们.在下列情景中,我将 ...

  7. 笨方法学python 习题37

    还是在笨方法学python中... 本节的习题是看一下作者列出的python中的各种运算符,尝试来理解这些符号. 在这里,我只列出了一些自己不会的,通过查百度得到得答案,这里来列举一下. (另外有不怎 ...

  8. 笨方法学python 15章疑问

    ** 笨方法学python 15章疑问 在15张中教我们读取文件,但是当我测试能否打开我之前写的py格式的文本时出现了这一幕 文件打开后然后又出现了 File "15.py", l ...

  9. 笨方法学python第四版当当_“笨办法”学Python(第3版)

    ZedShaw完善了这个堪称世上较好的Python学习系统.只要跟着学习,你就会和迄今为止数十万Zed教过的初学者一样获得成功. 在这本书中,你将通过完成52个精心设计的习题来学会Python.阅读这 ...

  10. 笨方法学python3-笨办法学python3 pdf下载|

    笨办法学python pdf电子版可以帮助想学习python编程的同学入门,你可以从上面学习如何快捷编写python代码,以及运行过程,还有非常多的习题讲解,需要的朋友可以来当易网下载使用. 笨办法学 ...

最新文章

  1. 十个形象比喻,助你理解计算机面试必备的知识点
  2. 某同学使用计算机求30,概率论与数理统计习题集及答案
  3. 【Android 应用开发】 ActionBar 基础
  4. 15.4.1 杠杆利用类型参数推断
  5. laravel 缓存相关常用操作
  6. 【java】System成员输入输出功能out、in、err
  7. EasyUI中的data-options属性的用法
  8. 瀚云平台kafka简单原理
  9. 华为S9306简单实用配置合集
  10. JAVA POI 设置 Word 纸张大小为 A3
  11. android 广播自启动,关于BOOT_COMPLETED广播-自启动
  12. 小程序结合腾讯地图(QQMapWX)SDK做位置周边搜索展示
  13. 大漠穷秋叫狼哥哥要学好的书
  14. MATLAB入门学习笔记12
  15. java数据类型有哪几种_Java数据类型有哪些?Java数据类型包括几种?
  16. IPD+CMMI+Scrum一体化研发管理解决方案之CMMI
  17. 【Linux系统编程】守护进程、线程
  18. JAVA:求大于200的最小质数
  19. icloud日历服务器_如何在Android上查看您的iCloud日历
  20. LTK5135M MSOP-8封装 耐压7V_F类、单声道音频放大器/兼容于4890,音质更好适用于车载导航仪、对讲机、便携游戏机等

热门文章

  1. int函数python_int()函数
  2. redis 运维讲解01
  3. 亚马逊正在逐渐压垮出版社,帮了世界一把
  4. 6.3 Annihilating Polynomials
  5. 严重: Null component Catalina:type=JspMonitor,name=jsp,WebModule=//localhost
  6. android chrome html,在桌面chrome中调试android设备中的web页面
  7. SQLite的使用------图片存储
  8. LeetCode | 575. Distribute Candies
  9. FDM打印机使用总结(一)
  10. Tomcat 的下载与安装教程