免费做封面的网站,湖州注册公司,删除windows wordpress,c 网站开发#x1f389; 本系列为Python基础学习#xff0c;原稿来源于 30-Days-Of-Python 英文项目#xff0c;大奇主要是对其本地化翻译、逐条验证和补充#xff0c;想通过30天完成正儿八经的系统化实践。此系列适合零基础同学#xff0c;或仅了解Python一点知识#xff0c;但又没… 本系列为Python基础学习原稿来源于 30-Days-Of-Python 英文项目大奇主要是对其本地化翻译、逐条验证和补充想通过30天完成正儿八经的系统化实践。此系列适合零基础同学或仅了解Python一点知识但又没有系统学习的使用者。总之如果你想提升自己的Python技能欢迎加入《挑战30天学完Python》 Day 21
类和对象 创建类创建对象类构造函数对象方法对象默认方法用方法修改类的默认值继承重写父方法 第21天练习 练习1级练习2级 Day 21
类和对象
Python是一种面向对象的编程语言。Python中的所有东西都是一个对象包括它的属性和方法。程序中使用的数字、字符串、列表、字典、元组、集合等都是相应内置类对象。我们创建类来创建对象。类类似于对象构造函数或者创建对象的“蓝图”。我们实例化一个类来创建一个对象。类定义对象的属性和行为而另一方面对象表示类。
从接受这个系列挑战开始我们就在不知不觉中使用类和对象。Python程序中的每个元素都是类的对象。让我们检查一下python中的所有内容是否都是类 pythonnum 10type(num)
class intstring stringtype(string)
class strboolean Truetype(boolean)
class boollst []type(lst)
class listtpl ()type(tpl)
class tupleset1 set()type(set1)
class setdct {}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, nameQi, 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, nameQi,countryChina):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, nameQi,countryChina):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, nameMegaQi, country中国, gendermale):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级
Python有一个名为 statistics 的模块我们可以使用这个模块来进行统计计算。然而为了学习如何制作函数和重用函数让我们尝试开发一个程序它可以计算样本的中趋势(均值中位数模态)和可变性(方差标准偏差)的度量。除了这些测量之外还要找到样本的最小值、最大值、计数、百分位数。您可以创建一个名为 Statistics 的类并将所有执行统计计算函数创建为 Statistics 类的方法。
练习2级
创建一个名为 PersonAccount 的类它有名字、收入、 花销属性并且有类方法 total_income, total_expense, account_info, add_income, add_expense 和 account_balance。编写代码实现记账业务。
练习参考21_exercise.py CONGRATULATIONS ! Day 20 | Day 22