9.1 : 创建和使用类
使用类几乎可以模拟任何东西
9.1.1 : 创建Dog类
根据Dog类创建每个实例都将存储名字和年龄,赋予每条小狗蹲下和打滚的能力;
# 定义一个名为Dog的类
class Dog:
"""一次模拟小狗的简单尝试"""
# 类中的函数称为方法:方法__init__();
# 方法__init__()定义成包含三个形参:self、name、和age;
# 形参self必不可少,必须位于其他形参的前面;
# 通过实参向Dog()传递名字和年龄,self会自动传递
def __init__(self, name, age):
"""初始化属性name和age"""
# 获取与行参name和age相关的取值,并将其赋给变量name和age,然后该变量关联到当前创建的实例;
self.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 :根据类创建实例
可将类视为有关如何创建实例的说明。Dog类是一系列说明,让python知道如何创建表示特定小狗的实例。
# 定义一个名为Dog的类
class Dog:
"""一次模拟小狗的简单尝试"""
# 类中的函数称为方法:方法__init__();
# 方法__init__()定义成包含三个形参:self、name、和age;
# 形参self必不可少,必须位于其他形参的前面;
# 通过实参向Dog()传递名字和年龄,self会自动传递
def __init__(self, name, age):
"""初始化属性name和age"""
# 获取与行参name和age相关的取值,并将其赋给变量name和age,然后该变量关联到当前创建的实例;
self.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!")
# 让python创建一条名字为'Willie'、年龄为6的小狗。
my_dog = Dog('Willie', 6)
your_dog = Dog('Lucy', 3)
my_dog.sit()
my_dog.roll_over()
# 编写了如下代码来访问my_dog的属性name和age的值;
print(f"\nMy 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()
运行结果:
Willie is now sitting.
Willie rolled over!My dog's name is Willie
My dog is 6 years old.Willie is now sitting.
Your dog's name is Lucy.
Your dog is 3 years old.
Lucy is now sitting.
9.2:使用类和实例
可使用类来模拟现实世界中的很多情景。类可执行修改实例的属性,也可编写方法来特定的方式进行修改。
9.2.1:Car 类
编写一个表示汽车的类,它存储了有关汽车的信息,还有一个汇总这些信息的方法:
class Car:
"""一次模拟汽车的简单尝试"""
# 定义方法,该方法还包含另外三个形参:make、model和year
def __init__(self, make, model, year):
"""初始化描述汽车的属性"""
self.make = make
self.model = model
self.year = year
# 定义一个名为get_descriptive_name的方法,它使用属于year、make和model创建一个对汽车进行描述的字符串;
def get_descriptive_name(self):
"""返回整洁的描述性信息"""
long_name = f"{self.year} {self.make} {self.model}"
return long_name.title()
# 根据Car类创建一个实例,并将其赋给变量my_new_car;
my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
9.2.2 :给属性指定默认值
创建实例时,有些属性无须通过行参来定义,可在方法 __init__()中为其指定默认值;
class Car:
def __init__(self, make, model, year):
"""初始化描述汽车的属性"""
self.make = make
self.model = model
self.year = year
# 添加一个名为odmeter_reading的属性,其初始值总是为0
self.odometer_reading = 0
def get_descriptive_name(self):
"""返回整洁的描述性信息"""
long_name = f"{self.year} {self.make} {self.model}"
return long_name.title()
# 定义一个名为read_odometer的方法
def read_odometer(self):
"""打印一条指出汽车里程的消息"""
print(f"This car has {self.odo