IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【“笨办法”学Python】41.学习面向对象术语 -> 正文阅读

[Python知识库]【“笨办法”学Python】41.学习面向对象术语

41.学习面向对象属于



前言

??这是一个学习面向对象术语的程序练习。


一、专有词汇练习

??类(class):告诉Python创建一个新的类。
??对象(object):两个意思,即最基本的东西,或者某样东西的实例。
??实例(instance):这是让Python创建一个类时得到的东西。
??def:这是在类里面定义函数的方法。
??self:在类的函数中,self指代被访问的对象或者实例的一个变量。
??继承(inheritance):指一个类可以继承另一个类的特性,和父子关系类似。
??组合(composition):指一个类可以将别的类作为它的部件构建起来,有点像车子和车轮的关系。
??属性(attribute):类的一个属性,它来自于组合,而且通常是一个变量。
??是什么(is-a):用来描述继承关系,如Salmon is-a Fish(蛙鱼是一种鱼)。
??有什么(has-a):用来描述某个东西是由另外一些东西组成的,或者某个东西有某个特征,如Salmon 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 = Qfoo.K = Q:“从foo获取K属性,并将其设置为Q。”

三、代码测试

??运行这段代码,练习面向对象术语。
??在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): \n\t def __init__(self, ***)":
            "类%%%有一个__init__,它接收self和***作为参数.",
        "class %%%(object): \n\t 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}\n\n')
except EOFError:
    print('\nBye')

在这里插入图片描述


总结

??以上内容介绍了Python的面向对象术语,有关Python、数据科学、人工智能等文章后续会不定期发布,请大家多多关注,一键三连哟(●’?’●)。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:51:09  更:2022-01-01 13:51:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:28:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码