• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
QQ糖_尤尤
博客园    首页    新随笔    联系   管理    订阅  订阅
9.2 使用类和实例

类编写好后,可以使用类来模拟现实世界中的很多情景,你只需要创建实例。

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.

 

posted on 2021-01-29 16:38  QQ糖_尤尤  阅读(125)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3