前言:类将函数和数据整洁地封装起来,让你能够灵活而高效地使用它们。
1、创建和使用类:
1.1、创建Dog类:
class Dog():
"""一次模拟小狗的简单尝试"""
def __init__(self,name,age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + " rolled over!")
my_dog = Dog(' willie', 6)
print(" My dog's name is " + my_dog.name.title() + ".")
print(" My dog is " + str( my_dog.age) + " years old.")
在定义类时,根据约定在Python中,首字母大写的名称指的是类。
""" """
表示_文档字符串_。
1、方法_ _ init _ _()
类中的函数,我们称之为方法
__init__()
是一个特殊的方法,每当根据Dog类调用新实例时,Python都会自动运行它。开头和末尾的两个下划线,是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。- 形 参: self 、name 和 age中,形参self必不可少必须在其他形参前面
- 原因:因 为 Python 调 用 这 个
__init__()
方 法 来 创 建 Dog 实 例 时, 将 自 动 传 入 实 参 self 。 - 每 个 与 类 相 关 联 的 方 法 调 用 都 自 动 传 递 实 参 self ,它 是 一 个 指 向 实 例 本 身 的 引 用, 让 实 例 能 够 访 问 类 中 的 属 性 和 方 法。
- 原因:因 为 Python 调 用 这 个
self.name = name
与self.age = age
获取存储在形参name、age中的值,并将其存储在变量name中,然后该变量被关联到当前创建的实例。- 以self为前缀的变量都可供类中所有的方法使用,我们还可以通过来的任何实例来访问这些变量。
- 可通过实例访问的变量称为属性。如:name、age
- 上例中,
sit()
和roll_over()
统称为方法。
1.2、根据类创建实例:
可将类视为有关如何创建实例的说明。
class Dog():
--snip--
❶ my_dog = Dog(' willie', 6)
❷ print(" My dog's name is " + my_dog.name.title() + ".")
❸ print(" My dog is " + str( my_dog.age) + " years old.")
- 方 法
__init__()
创 建 一 个 表 示 特 定 小 狗 的 示 例, 并 使 用 我 们 提 供 的 值 来 设 置 属 性 name 和 age 。方 法__init__()
并 未 显 式 地 包 含 return 语 句, 但 Python 自 动 返 回 一 个 表 示 这 条 小 狗 的 实 例。 - 创建实例:
my_dog = Dog('willie',6)
- 访问属性:
my_dog.name
- 调用方法:
my_dog.sit()
和my_dog.roll_over()
2、使用类和实例:
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 = str( self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
"""打印一条指出汽车里程的消息"""
print("This car has " + str(self.odometer_reading) + " mile on it.")
❸ my_new_car = Car(' audi', 'a4', 2016)
print( my_new_car.get_descriptive_name())
my_new_car.read_odometer()
2.1、给属性指定默认值:
上例中:self.odometer_reading = 0
2.2、修改属性的值:
-
直接修改属性的值:
class Car(): --snip-- my_new_car = Car(' audi', 'a4', 2016) print( my_new_car.get_descriptive_name()) my_new_car.odometer_reading =23 my_new_car.read_odometer() #输出结果: 2016 Audi A4 This car has 23 miles on it.
-
通过方法修改属性的值:
class Car(): --snip-- ❶ def update_odometer( self, mileage): """ 将 里 程 表 读 数 设 置 为 指 定 的 值 禁 止 将 里 程 表 读 数 往 回 调 """ 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(23) my_new_car.read_odometer()
-
通过方法对属性的值进行递增:
class Car(): --snip-- def update_odometer( self, mileage): --snip-- ❶ def increment_odometer( self, miles): """ 将 里 程 表 读 数 增 加 指 定 的 量""" self.odometer_reading + = miles ❷ my_used_car = Car(' subaru', 'outback', 2013) print( my_used_car.get_descriptive_name()) ❸ my_used_car.update_odometer( 23500) my_used_car.read_odometer() ❹ my_used_car.increment_odometer( 100) my_used_car.read_odometer() #输出结果: 2013 Subaru Outback This car has 23500 miles on it. This car has 23600 miles on it.
本章代码示例来自:[美] Eric Matthes. Python编程:从入门到实践