python从入门到实践 答案_【day 7】python编程:从入门到实践学习笔记-类(末附练习答案代码)...

这篇博客介绍了Python中的面向对象编程,包括如何创建和使用类,实例化对象,以及使用`__init__`方法初始化属性。文章还探讨了类的继承,展示了如何创建子类并重写父类方法。此外,还讲解了如何导入类以及使用Python标准库,例如从`collections`模块导入`OrderedDict`。示例代码详细展示了这些概念的应用。
摘要由CSDN通过智能技术生成

学习笔记目录

【本文目录】第九章创建和使用类

使用类和实例

继承

导入类

python标准库

第九章

面向对象编程时,都会遇到一个概念,类,python也有这个概念,下面我们通过代码来深入了解下。

创建和使用类class Dog():

def __init__(self, name, age):

self.name = name

self.age = age

def sit(self):

print(self.name.title() + " is now sitting.")

def roll_over(self):

print(self.name.title() + " rolled over!")

my_dog = Dog('willie', 6)

print("My dog's name is " + my_dog.name.title() + ".")

print("My dog is " + str(my_dog.age) + " years old.")

运行结果:

My dog's name is Willie.

My dog is 6 years old.

class关键字:来定义一个类。类名通常首字母为大写。

__init__方法:特殊方法,每当实例类的时候都会运行。其中的形参self必不可少,而且必须位于最前面。

self形参:类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候用不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身。

实例的方法是指定类名以及需要传入的实参。

要访问实例的属性或者调用方法,可使用句点表示法。

使用类和实例class Car():

def __init__(self, make, model, year):

self.make = make

self.model = model

self.year = year

self.odometer_reading = 0 #<- here

def get_descriptive_name(self):

long_name = str(self.year) + ' ' + self.make + ' ' + self.model

return long_name.title()

def read_odometer(self):

print("This car has " + str(self.odometer_reading) + " miles on it.")

my_new_car = Car('audi', 'a4', 2016)

print(my_new_car.get_descriptive_name())

my_new_car.read_odometer()

运行结果:

2016 Audi A4

可以看到,我们给Car类的属性指定了默认值self.odometer_reading = 0。如果要修改它,我们可以通过实例直接访问它并修改,比如:my_new_car.odometer_reading = 23。或者通过方法修改属性的值。或者通过方法对属性的值进行递增。class Car():

--snip--

#通过方法修改属性的值

def update_odometer(self, mileage):

self.odometer_reading = mileage

#通过方法对属性的值进行递增

def increment_odometer(self, miles):

self.odometer_reading += miles

继承

一个类继承另一个类时,他将自动获得另一个类的所有属性和方法;原有的类称为父类,新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

现在我们有一个Car类如下class Car():

def __init__(self, make, model, year):

self.make = make

self.model = model

self.year = year

self.odometer_reading = 0 #<- here

def get_descriptive_name(self):

long_name = str(self.year) + ' ' + self.make + ' ' + self.model

return long_name.title()

def read_odometer(self):

print("This car has " + str(self.odometer_reading) + " miles on it.")

def update_odometer(self, mileage):

self.odometer_reading = mileage

def increment_odometer(self, miles):

self.odometer_reading += miles

创建子类实例时,python首先给父类所有属性赋值。

接下来我们创建新类EleCarclass Car():

--snip--

class ElectricCar(Car):

def __init__(self, make, model, year):

super().__init__(make, model, year)

my_tesla = ElectricCar('tesla', 'model s', 2016)

print(my_tesla.get_descriptive_name())

运行结果:

2016 Tesla Model S

首先父类必须位于子类前面。

super()是一个特殊函数,将父类和子类关联起来。使得可调用子类的父类的方法__init__(),让子类包父类的所有属性。

给子类定义属性和方法没有任何限制,比如:class Car():

--snip--

class ElectricCar(Car):

def __init__(self, make, model, year):

super().__init__(make, model, year)

self.battery_size = 70

def describe_battery(self):

print("This car has a " + str(self.battery_size) + "-kWh battery.")

my_tesla = ElectricCar('tesla', 'model s', 2016)

print(my_tesla.get_descriptive_name())

my_tesla.describe_battery()

运行结果:

2016 Tesla Model S

This car has a 70-kWh battery.

如果需要重写父类的方法,只需定义一个与重写的父类方法同名的方法即可。

python还可以使用其他类的实例作为自己类的属性。

导入类

类似函数,类也可以保存为.py文件形成模块从而进行导入。

导入单个类: from model_name import class_name

导入一个模块的多个类: from model_name import class_name1, class_name2

导入一个模块所有类: from model_name import *

导入整个模块: import model_name

还可以在一个模块中导入另一个模块

python标准库

其是一组模块。模块collections中有一个类OrderedDict。字典的键值对没有顺序,但是这个类几乎和字典相同,区别只在于记录了键值对的顺序。from collections import OrderedDict

favorite_languages = OrderedDict()

favorite_languages['jen'] = 'python'

favorite_languages['sarah'] = 'c'

favorite_languages['edward'] = 'ruby'

favorite_languages['phil'] = 'python'

for name, language in favorite_languages.items():

print(name.title() + "'s favorite language is " +

language.title() + ".")

运行结果:

Jen's favorite language is Python.

Sarah's favorite language is C.

Edward's favorite language is Ruby.

Phil's favorite language is Python.

第九章练习答案代码 链接:https://pan.baidu.com/s/11pZkqdJgpc9IECs2ojzWzg 密码:se5m

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值