python从入门到实践第九章答案_《Python编程从入门到实践》_第九章_类

classDog():"""一次模拟小狗的简单尝试"""

def __init__(self, name, age):"""初始化属性name和age"""self.name=name

self.age=agedefsit(self):"""模拟小狗被命令时蹲下"""

print(self.name.title() + "now is sitting.")defroll_over(self):"""模拟小狗被命令时打滚"""

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

my_dog= Dog('tom',3)

your_dog= Dog('Mei',2)print("My dog name is" +my_dog.name.title())print("Your dog name is" +your_dog.name.title())#运行结果

My dog name isTom

Your dog nameis Mei

可按需求根据类创建任意数量的实例。

使用类和实例

给属性指定默认值

类中的每个属性都必须有初始值,哪怕这个值是0或空字符串,在有些情况下,如设置默认值时,在方法__init__()内指定这种初始值时可以的没如果你对某个属性这样做了,就无需包含为他提供初始化的形参。

classCar():"""一次模拟汽车的简单尝试"""

def __init__(self, make, model, year):"""汽车的初始化"""self.make=make

self.model=model

self.year=year

self.odometer_reading= 100

defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_name

my_car= Car('audi', 'a4', '2017')print(my_car.model)print(my_car.get_descri_name())#运行结果

a42017 a4 audi

直接修改属性的值

classCar():"""一次模拟汽车的简单尝试"""

def __init__(self, make, model, year):"""汽车的初始化"""self.make=make

self.model=model

self.year=year

self.odometer_reading= 100

defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_name

my_car= Car('audi', 'a4', '2017')print(my_car.get_descri_name())

my_car.year= 2016

print(my_car.get_descri_name())#运行结果

2017a4 audi2016 a4 audi

通过方法修改

classCar():"""一次模拟汽车的简单尝试"""

def __init__(self, make, model, year):"""汽车的初始化"""self.make=make

self.model=model

self.year=year

self.odometer_reading= 100

defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_namedefupdate(self, mile):"""更新里程值"""

if mile >self.odometer_reading:

self.odometer_reading=mileelse:print("You can't roll back an odometer")defincrement_odometer(self,mile):"""增加里程"""self.odometer_reading+=miledefread_odometer(self):"""打印汽车的里程"""

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

my_car= Car('audi', 'a4', '2017')

my_car.read_odometer()

my_car.odometer_reading= 10 #直接修改里程值

my_car.update(200) #通过方法修改里程

my_car.read_odometer()

my_car.increment_odometer(10)

my_car.read_odometer()#运行结果

This car has 100miles on it.

This car has200miles on it.

This car has210 miles on it.

继承

如果我们想再一个class继承另一个类的属性,可以在类后面括号中加入类的名称,举例如下:

classCar():"""一次模拟汽车的简单尝试"""

def __init__(self, make, model, year):"""汽车的初始化"""self.make=make

self.model=model

self.year=year

self.odometer_reading= 100

defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_namedefupdate(self, mile):"""更新里程值"""

if mile >self.odometer_reading:

self.odometer_reading=mileelse:print("You can't roll back an odometer")defincrement_odometer(self,mile):"""增加里程"""self.odometer_reading+=miledefread_odometer(self):"""打印汽车的里程"""

print("This car has" + str(self.odometer_reading) + "miles on it.")classElectricCar(Car):"""电动汽车的独特特性"""

def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)

my_tesla= ElectricCar('tesla', 'model s', '2016')print(my_tesla.get_descri_name())#运行结果

2016 model s tesla

为了继承父类的属性,还需要加入一个特殊的函数super(),帮助python将夫类和子类关联起来。

在python2.X中,类supper的格式如下:supper(Eletric,self).__init__(make, model, year)

给子类定义属性和方法

让一个类继承另一个类后,可添加区分子类和父类所属的新属性和新方法。

将实例用作属性

classCar():"""一次模拟汽车的简单尝试"""

def __init__(self, make, model, year):"""汽车的初始化"""self.make=make

self.model=model

self.year=year

self.odometer_reading= 100

defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_namedefupdate(self, mile):"""更新里程值"""

if mile >self.odometer_reading:

self.odometer_reading=mileelse:print("You can't roll back an odometer")defincrement_odometer(self,mile):"""增加里程"""self.odometer_reading+=miledefread_odometer(self):"""打印汽车的里程"""

print("This car has" + str(self.odometer_reading) + "miles on it.")classBattery():"""一次模拟电动汽车"""

def __init__(self,battery_size=70):"""初始化电瓶的属性"""self.battery_size=battery_sizedefdescribe_battery(self):"""打印一条描述电瓶容量的消息"""

print("This car has a" + str(self.battery_size) + "-kwh battery.")classElectricCar(Car):"""电动汽车的独特特性"""

def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)

self.battery=Battery()

my_tesla= ElectricCar('tesla', 'model s', '2016')print(my_tesla.get_descri_name())

my_tesla.battery.describe_battery()#运行结果

2016model s tesla

This car has a70-kwh battery.

导入类

导入单个或者多个类

一个文件car.py

classCar():"""一次模拟汽车的简单尝试"""

def __init__(self, make, model, year):"""汽车的初始化"""self.make=make

self.model=model

self.year=year

self.odometer_reading= 100

defget_descri_name(self):"""描述汽车"""long_name= str(self.year) + ' ' + self.model + ' ' +self.makereturnlong_namedefupdate(self, mile):"""更新里程值"""

if mile >self.odometer_reading:

self.odometer_reading=mileelse:print("You can't roll back an odometer")defincrement_odometer(self,mile):"""增加里程"""self.odometer_reading+=miledefread_odometer(self):"""打印汽车的里程"""

print("This car has" + str(self.odometer_reading) + "miles on it.")classBattery():"""一次模拟电动汽车"""

def __init__(self,battery_size=70):"""初始化电瓶的属性"""self.battery_size=battery_sizedefdescribe_battery(self):"""打印一条描述电瓶容量的消息"""

print("This car has a" + str(self.battery_size) + "-kwh battery.")classElectricCar(Car):"""电动汽车的独特特性"""

def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)

self.battery= Battery()

创建另一个文件my_car.py,导入一个类

from car importCar

my_car= Car('audi', 'a4', '2017')

一个模块中可以存储多个类,所以可以一次导入多个类

from car importCar,Battery,ElectricCar

my_tesla= ElectricCar('tesla', 'model s', '2016')print(my_tesla.get_descri_name())

my_tesla.battery.describe_battery()

导入整个模块

importcar #导入整个模块的时候,需要使用句点表示法访问需要的类

my_tesla= car.ElectricCar('tesla', 'model s', '2016')print(my_tesla.battery)

导入所有类

from car import * #导入所有的类

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值