【“笨办法”学Python】41.学习面向对象术语

本文通过实例讲解了Python中的核心面向对象概念,包括类(class)、对象(object)、实例(instance)、def定义、self引用、继承与组合、属性以及is-a和has-a关系。通过代码示例和练习,帮助读者掌握面向对象编程的基础术语。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、数据科学、人工智能等文章后续会不定期发布,请大家多多关注,一键三连哟(●’◡’●)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器视觉小学徒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值