挑战30天学完Python:Day21 类和对象

2024-02-26 05:44

本文主要是介绍挑战30天学完Python:Day21 类和对象,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点知识,但又没有系统学习的使用者。总之如果你想提升自己的Python技能,欢迎加入《挑战30天学完Python》

📘 Day 21

  • 类和对象
    • 创建类
    • 创建对象
    • 类构造函数
    • 对象方法
    • 对象默认方法
    • 用方法修改类的默认值
    • 继承
    • 重写父方法
  • 💻 第21天练习
    • 练习1级
    • 练习2级

📘 Day 21

类和对象

Python是一种面向对象的编程语言。Python中的所有东西都是一个对象,包括它的属性和方法。程序中使用的数字、字符串、列表、字典、元组、集合等都是相应内置类对象。我们创建类来创建对象。类,类似于对象构造函数,或者创建对象的“蓝图”。我们实例化一个类来创建一个对象。类定义对象的属性和行为,而另一方面,对象表示类。

从接受这个系列挑战开始,我们就在不知不觉中使用类和对象。Python程序中的每个元素都是类的对象。让我们检查一下python中的所有内容是否都是类:

> python
>>> num = 10
>>> type(num)
<class 'int'>
>>> string = 'string'
>>> type(string)
<class 'str'>
>>> boolean = True
>>> type(boolean)
<class 'bool'>
>>> lst = []
>>> type(lst)
<class 'list'>
>>> tpl = ()
>>> type(tpl)
<class 'tuple'>
>>> set1 = set()
>>> type(set1)
<class 'set'>
>>> dct = {}
>>> type(dct)
<class 'dict'>

创建类

要创建一个类,我们需要使用关键词 class 然后后边跟着名字和冒号,类的名字建议使用驼峰命名法。

# 语法形式
class ClassName:这里编写代码

举例:

class Person:pass
print(Person)
<class '__main__.Person'>

创建对象

我们可以通过调用初始化类来创建对象。

p = Person()
print(p)
# <__main__.Person object at 0x000002084C138490>

类构造函数

在上面的例子中,我们已经从Person类创建了一个对象。然而,没有构造函数的类,在实际应用程序中并没有真正的用处。让我们使用构造函数函数使我们的类更有用。与Java或JavaScript中的构造函数类似,Python也有内置的 __init__() 构造函数。init 构造函数带有self形参,它表示类的当前实例的引用。

例子:

class Person:def __init__ (self, name):self.name =namep = Person('MegaQi')
print(p.name)
print(p)

输出

MegaQi
<__main__.Person object at 0x000002DA62D18490>

让我们在构造函数中再添加一些参数

class Person:def __init__(self, firstname, lastname, country, city):self.firstname = firstnameself.lastname = lastnameself.country = countryself.city = cityp = Person('Mega', 'Qi', 'China', 'ShangHai')
print(p.firstname)
print(p.lastname)
print(p.country)
print(p.city)

输出

Mega
Qi
China
ShangHai

对象方法

对象可以有方法。方法属于对象的函数。

举例:

class Person:def __init__(self, name, country, city):self.name = nameself.country = countryself.city = citydef person_info(self):return f'{self.name} 居住在{self.country} {self.city}'p = Person('Qi','中国', '上海')
print(p.person_info())
# Qi 居住在中国 上海

对象默认方法

有时候,你可能想为你的对象方法设置一个默认值。如果在构造函数中为形参指定默认值,就可以避免在不带形参的情况下调用或实例化类时出现错误。让我们看看它是什么样子的:

class Person:def __init__(self, name='Qi', country='中国', city='上海'):self.name = nameself.country = countryself.city = citydef person_info(self):return f'{self.name} 居住在{self.country} {self.city}'p1 = Person()
print(p1.person_info())
p2 = Person('MeagaQi', '法国', '巴黎')
print(p2.person_info())

输出

# 默认给定参值
Qi 居住在中国 上海
# 指定参数值
MeagaQi 居住在法国 巴黎

用方法修改类的默认值

在下面的例子person类中,所有构造函数参数都有默认值。除此之外,我们还添加了一个技能参数,我们可以使用方法访问和修改它,比如向其中添加新的技能。

class Person:def __init__(self, name='Qi',country='China'):self.name = nameself.country = countryself.skills = []def person_info(self):return f'{self.name} 住在 {self.country} 我的新技能树有 {self.skills}'def add_skill(self, skill):self.skills.append(skill)class Student(Person):passs1 = Student('MegaQi', 'China')
s2 = Student('Tom', 'Finland')print(s1.person_info())
s1.add_skill('JavaScript')
s1.add_skill('React')
s1.add_skill('Python')
print(s1.skills)print(s2.person_info())
s2.add_skill('Organizing')
s2.add_skill('Marketing')
s2.add_skill('Digital Marketing')
print(s2.skills)p = Person()
print(p.person_info())
p.add_skill('HTML')
p.add_skill('CSS')
p.add_skill('JavaScript')
print(p)
print(p.person_info())
print(p.skills)

输出

Qi 住在 China 我的新技能树有 []
<__main__.Person object at 0x0000023202118490>
Qi 住在 China 我的新技能树有 ['HTML', 'CSS', 'JavaScript']
['HTML', 'CSS', 'JavaScript']

继承

继承允许我们定义一个从父类继承所有方法和属性的类。父类或基类是提供所有方法和属性的类。子类是继承自另一个类或父类的类。

让我们通过继承 person 类来创建一个 student 类。

class Student(Person):passs1 = Student('MegaQi', 'China')
s2 = Student('Tom', 'Finland')print(s1.person_info())
s1.add_skill('JavaScript')
s1.add_skill('React')
s1.add_skill('Python')
print(s1.skills)print(s2.person_info())
s2.add_skill('Organizing')
s2.add_skill('Marketing')
s2.add_skill('Digital Marketing')
print(s2.skills)

输出

MegaQi 住在 China 我的新技能树有 []
['JavaScript', 'React', 'Python']
Tom 住在 Finland 我的新技能树有 []
['Organizing', 'Marketing', 'Digital Marketing']

我们没有在子类中调用 init() 构造函数。虽然我们不调用它,但我们仍然可以从父类访问所有属性。但是如果我们调用构造函数,我们可以通过调用 super 来访问父属性。

我们可以给子类添加一个新方法,也可以通过在子类中创建相同的方法名来覆盖父类方法。比如当我们添加 init() 函数时,子类将不再继承父类的 init() 函数。

重写父方法

class Person:def __init__(self, name='Qi',country='China'):self.name = nameself.country = countryself.skills = []def person_info(self):return f'{self.name} 住在 {self.country} 我的新技能树有 {self.skills}'def add_skill(self, skill):self.skills.append(skill)class Student(Person):def __init__ (self, name='MegaQi', country='中国', gender="male"):self.gender = gendersuper().__init__(name, country)def person_info(self):gender = "他" if self.gender =='male' else '她'return f'{gender} 居住在 {self.country}。's1 = Student('ZhangSan', 'Finland','male')
print(s1.person_info())
s1.add_skill('JavaScript')
s1.add_skill('React')
s1.add_skill('Python')
print(s1.skills)s2 = Student('Lidiya', 'England', 'female')
print(s2.person_info())
s2.add_skill('Organizing')
s2.add_skill('Marketing')
s2.add_skill('Digital Marketing')
print(s2.skills)
他 居住在 Finland。
['JavaScript', 'React', 'Python']
她 居住在 England。
['Organizing', 'Marketing', 'Digital Marketing']

我们可以使用super()内置函数或父类名称Person自动从父类继承方法和属性。在上面的例子中,我们重写了父方法。子方法有一个不同的特点,它可以识别性别,根据输入的性别来决定使用哪个代词他或她。

🌕 现在,您已经完全拥有了编程的超级能力。现在来做些练习巩固下成果把。

💻 第21天练习

练习1级

  1. Python有一个名为 statistics 的模块,我们可以使用这个模块来进行统计计算。然而,为了学习如何制作函数和重用函数,让我们尝试开发一个程序,它可以计算样本的中趋势(均值,中位数,模态)和可变性(方差,标准偏差)的度量。除了这些测量之外,还要找到样本的最小值、最大值、计数、百分位数。您可以创建一个名为 Statistics 的类,并将所有执行统计计算函数创建为 Statistics 类的方法。

练习2级

  1. 创建一个名为 PersonAccount 的类,它有名字、收入、 花销属性,并且有类方法 total_income, total_expense, account_info, add_income, add_expense 和 account_balance。编写代码实现记账业务。

练习参考:21_exercise.py

🎉 CONGRATULATIONS ! 🎉

<< Day 20 | Day 22 >>

这篇关于挑战30天学完Python:Day21 类和对象的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/747849

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D