挑战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

相关文章

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模