
41.学习面向对象属于
文章目录
- 前言
- 一、专有词汇练习
- 二、措辞联系
- 三、代码测试
- 总结
前言
这是一个学习面向对象术语的程序练习。
一、专有词汇练习
类(class):告诉Python创建一个新的类。
对象(object):两个意思,即最基本的东西,或者某样东西的实例。
实例(instance):这是让Python创建一个类时得到的东西。
def:这是在类里面定义函数的方法。
self:在类的函数中,self指代被访问的对象或者实例的一个变量。
继承(inheritance):指一个类可以继承另一个类的特性,和父子关系类似。
组合(composition):指一个类可以将别的类作为它的部件构建起来,有点像车子和车轮的关系。
属性(attribute):类的一个属性,它来自于组合,而且通常是一个变量。
是什么(is-a):用来描述继承关系,如Salmon is-a Fish(蛙鱼是一种鱼)。
有什么(has-a):用来描述某个东西是由另外一些东西组成的,或者某个东西有某个特征,如Salmon has-a mouth(蛙鱼有一张嘴)。
接下来给出一些代码,以及用来描述代码的句子:
三、代码测试
运行这段代码,练习面向对象术语。
在Window上键入Python就可以进行练习。
python ex41.py english
import random from urllib.request import urlopen import sys Word_url = 'http://learncodethehardway.org/words.txt' # 一个包含网址的字符串,之后调用一个方法打开这个网址,网址里面是很多行单词。 Words = [] # 一个空列表 phrases = { # 一个字典,键是 *** 作,值是说明,得到一个字典,key为问题,value为答案,其中%%%代表类,***代表参数或函数,@@@代表参数 "class %%%(%%%)": "创建一个叫%%%的类,它是%%%的一种.", "class %%%(object): nt def __init__(self, ***)": "类%%%有一个__init__,它接收self和***作为参数.", "class %%%(object): nt def ***(self, @@@)": "类%%%有一个名为***的函数,它接收self和@@@作为参数.", "*** = %%%()": "将***设为类%%%的一个实例.", "***.***(@@@)": "从***中找到***函数,并使用self和@@@参数调用它.", "***.*** = '***": "从***获取***属性,并将其设置为'***'." } # do they want to drill phrases first if len(sys.argv) == 2 and sys.argv[1] == 'english': # 在这个条件下,phrase_first 为True,得到一个布尔值 phrase_first = True else: phrase_first = False # load up the words from the website for word in urlopen(Word_url).readlines(): # 读取网址里的每一行的单词 Words.append(str(word.strip(), encoding = 'utf-8')) # 将每一行单词除去头尾空格、以 utf-8 编码格式设为字符串、加到Words列表中;得到一个Words列表 def convert(snippet, phrase): # 输入两个参数,根据情况,替换参数中的各类符号,完成后以列表返回 class_names = [w.capitalize() for w in # 从下面的随机列表中取出一个w,将w设为首字母大写,作为列表class_names的值,得到一个列表 random.sample(Words, snippet.count('%%%'))] # 统计snippet中‘%%%’出现的次数x,从Words中随机取出x个元素 other_names = random.sample(Words, snippet.count('***')) # 统计snippet中‘***’的次数,从Words中取出这个数个元素,作为列表other_names的值 results = [] # 一个空列表,待使用 param_names = [] # 一个空列表,待使用 for i in range(0, snippet.count('@@@')): # i在范围内时 param_count = random.randint(1,3) # 通过random.randint(1,3)返回1-3之间的整数,赋给param_count,得到一个param_count变量 param_names.append(', '.join( random.sample(Words, param_count))) # 从Words列表中取出param_count个值作为新列表,通过join方法,以「,」连接成字符串,赋给param_names,得到一个param_names字符串 for sentence in snippet, phrase: # 循环两次 result = sentence[:] # 将sentence复制给result,其实也就是把参数复制给result,但复制的是哪个? # fake class names for word in class_names: result = result.replace('%%%', word, 1) # 用网址里的单词(class_names,上边处理的,来自网址中)替换‘%%%’,最多不超过1次 # fake other names for word in other_names: result = result.replace('***', word, 1) # 用网址里的单词(other_names,上边处理的,来自网址中)替换‘***’,最多不超过1次 # fake parameter lists for word in param_names: result = result.replace('@@@',word, 1) # 用param_names替换‘@@@’,最多不超过1次 results.append(result) # 将result加入results列表中 return results # 将results列表返回 # keep going until the hit CTRL_D try: while True: snippets = list(phrases.keys()) # 将phrases的keys,作为列表赋予给snippets random.shuffle(snippets) # 把snippets列表打乱 for snippet in snippets: phrase = phrases[snippet] # phrase为字典phrases中key为snippet的值 question, answer = convert(snippet, phrase) # 两个参数带入函数处理,把返回的值按顺序赋给question和answer,第一个是question,第二个是answer if phrase_first: question, answer = answer, question print(question) input('> ') print(f'answer: {answer}nn') except EOFError: print('nBye')
总结
以上内容介绍了Python的面向对象术语,有关Python、数据科学、人工智能等文章后续会不定期发布,请大家多多关注,一键三连哟(●’◡’●)。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)