【Python】第九章 类_创建和使⽤类

# _*_ coding:utf-8 _*_
"""
name:zhangxingzai
date:2022/11/17
from:《Python编程从入门到实践》
"""
9.1 创建和使⽤类
使⽤类⼏乎可以模拟任何东⻄。下⾯来编写⼀个表⽰⼩狗的简单类Dog ,它表⽰的
不是特定的⼩狗,⽽是任何⼩狗。对于⼤多数宠物狗,我们都知道些什么呢?它们
都有名字和年龄。我们还知道,⼤多数⼩狗还会蹲下和打滚。由于⼤多数⼩狗都具
备上述两项信息(名字和年龄)和两种⾏为(蹲下和打滚),我们的Dog 类将包含
它们。这个类让Python知道如何创建表⽰⼩狗的对象。编写这个类后,我们将使⽤
它来创建表⽰特定⼩狗的实例。

9.1.1 创建类
定义⼀个名为Dog 的类。根据约定,在Python中,⾸字⺟⼤写的名称指的是类。这个类定义中没有圆括号,因为要从空⽩创建这个类。
class Dog:
    """⼀次模拟⼩狗的简单尝试。"""
    def __init__(self, name, age):

        """初始化属性name和age。"""

        self.name = name
        self.age = age
        '''
        self.name = name 获取与形参name 相关联
        的值,并将其赋给变量name ,然后该变量被关联到当前创建的实例。self.age =
        age 的作⽤与此类似。像这样可通过实例访问的变量称为属性 。
        '''

    def sit(self):
        """模拟⼩狗收到命令时蹲下。"""
        print(f"{self.name} is now sitting.")
    def roll_over(self):
        """模拟⼩狗收到命令时打滚。"""
        print(f"{self.name} rolled over!")
9.1.2 根据类创建实例
my_dog = Dog('Willie', 6)
your_dog = Dog('Lucy', 3)

print(f"My dog's name is {my_dog.name}.")
print(f"My dog is {my_dog.age} years old.")
my_dog.sit()

print(f"\nYour dog's name is {your_dog.name}.")
print(f"Your dog is {your_dog.age} years old.")
your_dog.sit()
9.2 使⽤类和实例
9.2.1 下⾯来编写⼀个表⽰汽⻋的类。它存储了有关汽⻋的信息,还有⼀个汇总这些信息的⽅法:
class Car:
    """⼀次模拟汽⻋的简单尝试。"""
    def __init__(self, make, model, year):
        """初始化描述汽⻋的属性。"""
        self.make = make
        self.model = model
        self.year = year
        '''
        定义了⽅法__init__() 。与前⾯的Dog 类中⼀样,这个⽅法的第⼀个形参
        为self 。该⽅法还包含另外三个形参:make 、model 和year 。⽅法__init__()
        接受这些形参的值,并将它们赋给根据这个类创建的实例的属性。创建新的Car 实
        例时,需要指定其制造商、型号和⽣产年份。
        '''
    def get_descriptive_name(self):
        """返回整洁的描述性信息。"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()


my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
9.2.2 给属性指定默认值
创建实例时,有些属性⽆须通过形参来定义,可在⽅法__init__() 中为其指定默
认值。
下⾯来添加⼀个名为odometer_reading 的属性,其初始值总是为0。我们还添加
了⼀个名为read_odometer() 的⽅法,⽤于读取汽⻋的⾥程表:
class Car:
    def __init__(self, make, model, year):
        """初始化描述汽⻋的属性。"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0

    def get_descriptive_name(self):
        """返回整洁的描述性信息。"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

    def read_odometer(self):
        """打印⼀条指出汽⻋⾥程的消息。"""
        print(f"This car has {self.odometer_reading} miles on it.")


my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
9.2.3 修改属性的值
我们能以三种⽅式修改属性的值:直接通过实例进⾏修改,通过⽅法进⾏设置,以
及通过⽅法进⾏递增(增加特定的值)。下⾯依次介绍这些⽅式。

a. 直接修改属性的值
要修改属性的值,最简单的⽅式是通过实例直接访问它。下⾯的代码直接将⾥程表读数设置为23:
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
b. 通过⽅法修改属性的值
如果有⽅法能替你更新属性,将⼤有裨益。这样就⽆须直接访问属性,⽽可将值传递给⽅法,由它在内部进⾏更新。
class Car:
    def __init__(self, make, model, year):
        """初始化描述汽⻋的属性。"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0

    def get_descriptive_name(self):
        """返回整洁的描述性信息。"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

    def read_odometer(self):
        """打印⼀条指出汽⻋⾥程的消息。"""
        print(f"This car has {self.odometer_reading} miles on it.")

    def update_odometer(self, mileage):
        """将⾥程表读数设置为指定的值。"""
        self.odometer_reading = mileage


my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
my_new_car.update_odometer(24)
my_new_car.read_odometer()
c. 通过⽅法对属性的值进⾏递增
有时候需要将属性值递增特定的量,⽽不是将其设置为全新的值。假设我们购
买了⼀辆⼆⼿⻋,且从购买到登记期间增加了100英⾥的⾥程。下⾯的⽅法让
我们能够传递这个增量,并相应地增⼤⾥程表读数:
class Car:
    def __init__(self, make, model, year):
        """初始化描述汽⻋的属性。"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0

    def get_descriptive_name(self):
        """返回整洁的描述性信息。"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

    def read_odometer(self):
        """打印⼀条指出汽⻋⾥程的消息。"""
        print(f"This car has {self.odometer_reading} miles on it.")

    def update_odometer(self, mileage):
        """将⾥程表读数设置为指定的值。"""
        self.odometer_reading = mileage

    def increment_odometer(self, miles):
        """将⾥程表读数增加指定的量。"""
        self.odometer_reading += miles


my_used_car = Car('subaru', 'outback', 2015)
print(my_used_car.get_descriptive_name())
my_used_car.update_odometer(23_500)
my_used_car.read_odometer()
my_used_car.increment_odometer(100)
my_used_car.read_odometer()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胖虎*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值