类编写好后,可以使用类来模拟现实世界中的很多情景,你只需要创建实例。
9.2.1 Car类
下面是一个表示汽车的类,它存储了有汽车的信息,还有一个汇总这些信息的方法:
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
"""初始化描述汽车的属性"""
self.make=make
self.model=model
self.year=year
def get_descriptive_name(self):
"""返回于整洁的描述性信息"""
long_name=str(self.year)+" "+self.make+" "+self.model
return long_name.title()
my_new_car=Car("audi","a4",2016)
print(my_new_car.get_descriptive_name())
"""__init__()方法,第一个形参self,另外三个形参:make、model和year。创建实例时,需要指定其制造熵、型号和生产年份。
get_descriptive_name()方法,使用属性year、make和model创建一个对汽车字符串,访问属性值的方法是:self.model,self.make、self.year.
my_new_car=Car("audi","a4",2016)创建了一个实例。指出我们拥有的是一辆什么样的汽车。
"""
运行结果:
>>>
=================== RESTART: D:/python学习/第9章 类/9.2/car.py ===================
2016 Audi A4
>>>
9.2.2 给属性指定默认值
为让这个类更有趣,下面给它添加一个随时间变化的属性,它存储汽车的总里程。
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
"""初始化描述汽车的属性"""
self.make=make
self.model=model
self.year=year
self.odometer_reading=0 #新添加的属性初始值为0
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()
运行结果:
>>>
================= RESTART: D:/python学习/第9章 类/9.2/car9.2.2.py =================
2016 Audi A4
This car has0miles on it.
>>>
9.2.3 修改属性的值
方法有三种:1.直接通过实例进行;2.通过进行设置;3.通过方法进行传递(增加特定的值)
1.直接修改属性的值
最简单的方法是通过实例直接访问它。
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
"""初始化描述汽车的属性"""
self.make=make
self.model=model
self.year=year
self.odometer_reading=0 #新添加的属性初始值为0
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.odometer_reading=23 #直接将里程表计数设置为23
my_new_car.read_odometer()
运行结果:
>>>
================= RESTART: D:/python学习/第9章 类/9.2/car9.2.3.py =================
2016 Audi A4
This car has 23 miles on it.
>>>
2.通过方法修改属性的值
可以添加一个方法,使其在内部进行更新,就无需直接访问属性。
下面示例演示了一个名为update_odometer()的方法,可将值传递给它后,由它在内部进行更新。
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
"""初始化描述汽车的属性"""
self.make=make
self.model=model
self.year=year
self.odometer_reading=0 #新添加的属性初始值为0
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
my_new_car=Car("audi","a4",2016)
print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(300)#调用update_odometer(),并向它提供了实参23(该实参对应于方法定义中的形参mileage)
my_new_car.read_odometer()
运行结果:
>>>
================ RESTART: D:/python学习/第9章 类/9.2/car9.2.3.2.py ================
2016 Audi A4
This car has 300 miles on it.
>>>
可对方法update_odometer()进行扩展,使其在修改里程表计数时做些额外的工作。下面来添加 一些逻辑,禁止任何人将里程表计数往回调。
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
"""初始化描述汽车的属性"""
self.make=make
self.model=model
self.year=year
self.odometer_reading=400 #新添加的属性初始值为0
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):
"""将里程表计数指定的值
禁止将里程表读数往回调
如果新指定的数(mileage)大于或等于原来的里程(self.odometer_reading)则里程表计数改为新指定的里程,否则发出警告。
"""
if mileage>=self.odometer_reading:
self.odometer_reading=mileage
else:
print("You can't roll back an odometer!")
my_new_car=Car("audi","a4",2016)
print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(300)#调用update_odometer(),并向它提供了实参23(该实参对应于方法定义中的形参mileage)
my_new_car.read_odometer()
运行结果:
>>>
================ RESTART: D:/python学习/第9章 类/9.2/car9.2.3.3.py ================
2016 Audi A4
You can't roll back an odometer!
This car has 400 miles on it.
>>>
3.通过方法对属性的值进行递增假设买了一辆二手车,下面的方法让我们能够 传递一个增量,记录从购买到此时里程增加了100英里,并相应地增加里程表读数。
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self,make,model,year):
"""初始化描述汽车的属性"""
self.make=make
self.model=model
self.year=year
self.odometer_reading=400 #新添加的属性初始值为0
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):
"""将里程表计数指定的值
禁止将里程表读数往回调
如果新指定的数(mileage)大于或等于原来的里程(self.odometer_reading)则里程表计数改为新指定的里程,否则发出警告。
"""
if mileage>=self.odometer_reading:
self.odometer_reading=mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self,miles): #该方法接受一个单位为英里的数字,并将其加入到self.odometer_reading中
"""将里程表读数增加指定的量"""
if miles>=0:
self.odometer_reading+=miles
else:
print("警告:请不要回调里程表")
"""创建一辆二手车my_used_car"""
my_used_car=Car("audi","a4",2013)
print(my_used_car.get_descriptive_name())
"""调用方法update_odometer()并传入22300,将该车的里程表读数设置为22300"""
my_used_car.update_odometer(22300)#调用update_odometer(),并向它提供了实参23(该实参对应于方法定义中的形参mileage)
my_used_car.read_odometer()
"""调用inxewmwnr_odometer()并传入100,以增加从购买到登记期间行驶的100英里。
也可以修改此方法,以禁止增量为负值,从而防止有人利用它来回拨里程表。
"""
my_used_car.increment_odometer(100)
my_used_car.read_odometer()
print("\n\n")
my_used_car.increment_odometer(-100)
my_used_car.read_odometer()
运行结果:
>>>
================ RESTART: D:/python学习/第9章 类/9.2/car9.2.3.4.py ================
2013 Audi A4
This car has 22300 miles on it.
This car has 22400 miles on it.
警告:请不要回调里程表
This car has 22400 miles on it.
浙公网安备 33010602011771号