本章学习链接如下:
基本概念与语法
类(Class):定义了一组对象共有的属性和方法的蓝图。类是创建对象的模板。
对象(Object):类的实例。对象包含实际的数据和操作数据的方法。
属性(Attribute):对象的变量,用于存储数据。
方法(Method):属于对象的函数,用于定义对象的行为。
继承(Inheritance):允许一个类继承另一个类的属性和方法,从而促进代码的重用。
封装(Encapsulation):隐藏对象的内部细节,只通过定义好的接口与外界交互,这有助于降低系统的复杂性和增强安全性。
多态(Polymorphism):指允许使用对象的共同接口来访问不同的底层形式(数据类型)
1.类和对象
这样干巴巴的解释非常的难以理解,我们可以把类想象成一个制造蛋糕的食谱。食谱上有制作蛋糕所需的原材料(属性)和制作步骤(方法)。这个食谱就是一个模板,告诉你如果按照特定的步骤操作,将得到什么样的蛋糕。运用不同的方法我们可以得到不同口味的蛋糕。
对象则是根据这个食谱实际制作出来的蛋糕。每次你使用这个食谱制作蛋糕,都会得到一个新的蛋糕实体,这就是一个对象。虽然每个蛋糕的基本结构相同(因为都是按照同一食谱来的),但你可以根据口味调整原料,比如加更多的糖或者少放点盐,这样每个蛋糕都有自己独特的风味,这些特定的风味和特征就是对象的属性。
比如现在我们需要写一个代码题目,有一个类叫做 Car
,它定义了车辆的基本属性如品牌、颜色、速度,以及可以进行的操作如启动、停止等。当你创建一个具体的 Car
对象时,比如一个红色的丰田汽车,你就是根据 Car
类的食谱制作了一个蛋糕,这个蛋糕具体的是红色的,品牌是丰田。
我们一步步来做这个题目:
在指明类的属性中,我们用到的是类的构造函数,类的构造函数是一个非常重要的组件,它的主要作用是初始化新创建的对象的状态,构造函数被称为__init__
方法。
(1)基本语法
构造函数
构造函数是通过定义一个名为 __init__
的特殊方法实现的。这个方法会在类的对象被创建时自动调用。
class ClassName:
:定义了一个名为ClassName
的类。def __init__(self, param1, param2)
:是类的构造函数。__init__
是一个由Python预定义的特殊方法(也称为魔术方法),用于初始化新创建的对象。self
:是一个指向实例本身的引用,用于访问类的属性和方法。param1
,param2
:构造函数可以接受参数,这些参数在创建类的实例时提供,用于设置对象的初始状态或执行其他操作。self.param1 = param1
:这句话代码的作用是:将传入的参数赋值给实例的属性,这句话可能有些拗口,这是什么意思呢?self.param1和param1
的区别:我们可以看到这两个变量的位置,param1
是构造函数__init__
的变量,而self.param1
是类中的变量,所以如果我们想要访问基于类所创建的对象的属性和方法时,必须经过变量self.×××。
class ClassName:def __init__(self, param1, param2):self.param1 = param1self.param2 = param2
如下代码所示:
- 当创建一个
Person
类的实例时,如person1 = Person('Alice', 30)
,构造函数__init__
被调用,其中的name
和age
参数分别被设置为'Alice'
和30
。 self.name = name
和self.age = age
这两句代码将这些参数值赋给实例的name
和age
属性。即作用为当我们创建类中不同的实例时,这些实例就已经拥有了类中的属性,不同的实例对于这些属性有不同的赋值,这意味着 在这个例子中,person1.name
将被设置为'Alice'
,person1.age
被设置为30
。- 这样设置后,这些属性可以在类的其他方法中被访问和使用,比如
display
方法可以打印出这些属性的值。
class Person:def __init__(self, name, age):self.name = nameself.age = agedef display(self):print(f"Name: {self.name}, Age: {self.age}")
2.属性和方法
关于属性之前我们介绍过了 。
类的属性
属性是类中定义的变量,用于存储对象的状态或数据。在类的实例中,每个属性可以有不同的值,即每个对象可以有自己的属性值。
类的方法
方法是定义在类中的函数,用于执行操作,可以访问和修改类的属性,或执行与类功能相关的任务。
基本语法
class ClassName:def method_name(self, parameter1, parameter2):# 方法体return some_value
具体实例
在这个示例中,Car
类有一个方法 describe
,它返回一条描述该汽车的信息。这个方法使用了 self
关键字来访问实例的属性。
class Car:def __init__(self, brand, color):self.brand = brandself.color = colordef describe(self):return f"This is a {self.color} {self.brand}."
实例,属性,方法的具体使用
这个代码示例展示了如何创建一个具有属性和方法的 Car
类。accelerate
方法用于增加汽车的速度,而 brake
方法用于停车。每个方法都通过 self
访问和修改了汽车的状态,展示了面向对象编程的封装特性
class Car:def __init__(self, brand, color, speed=0):self.brand = brandself.color = colorself.speed = speeddef describe(self):return f"This is a {self.color} {self.brand}."def accelerate(self, amount):self.speed += amountreturn f"{self.brand} is now going {self.speed} km/h."def brake(self):self.speed = 0return f"{self.brand} has stopped."# 创建Car类的实例
my_car = Car("Toyota", "red")
print(my_car.describe()) # 调用方法
print(my_car.accelerate(50)) # 加速车辆
print(my_car.brake()) # 刹车停车
练习题
创建一个 Car
类的实例,名为 my_car
,它是一个红色的丰田汽车。随后调用这个实例的启动、加速、减速和停止方法,以展示类的功能。通过这些操作,可以看到汽车状态的变化和如何通过类的方法控制这些状态。这是一个很好的面向对象编程(OOP)示例,展示了如何用Python来封装数据和功能。
1.指明类属性,指明car这个类的属性是品牌,颜色,初始速度为0.
class Car:def __init__(self, brand, color, speed=0):self.brand = brandself.color = colorself.speed = speed
- 构造函数:接受品牌、颜色和可选的初始速度参数,初始化汽车的基本属性。
- 启动方法 (
start
):将汽车的速度从0增加到10,并打印当前状态。 - 停止方法 (
stop
):将汽车的速度设置为0,并打印停车状态。 - 加速方法 (
accelerate
):接受一个增量参数,将此数值加到当前速度上,并打印新的速度。 - 减速方法 (
decelerate
):接受一个减速值,如果减速值大于当前速度,则调用停止方法;否则从当前速度中减去该值,并打印新的速度。
代码如下所示,并带有对应的注释。
class Car:def __init__(self, brand, color, speed=0):"""初始化一个新汽车,指定品牌、颜色和可选的初始速度。:param brand: String, 汽车的品牌。:param color: String, 汽车的颜色。:param speed: Integer, 汽车当前的速度,默认为0。"""self.brand = brandself.color = colorself.speed = speeddef start(self):"""启动汽车,将速度从0设置为默认的起始速度10。"""self.speed = 10print(f"已启动{self.color}色的{self.brand}汽车,当前速度为{self.speed}。")def stop(self):"""停止汽车,将速度设置为0。"""self.speed = 0print(f"{self.color}色的{self.brand}汽车已停止。")def accelerate(self, increase):"""增加汽车的速度。:param increase: Integer, 增加的速度量。"""self.speed += increaseprint(f"{self.color}色的{self.brand}汽车正在加速,当前速度为{self.speed}。")def decelerate(self, decrease):"""减少汽车的速度。:param decrease: Integer, 减少的速度量。"""if decrease > self.speed:print("减速量超过当前速度,汽车将停止。")self.stop()else:self.speed -= decreaseprint(f"{self.color}色的{self.brand}汽车正在减速,当前速度为{self.speed}。")# 创建一个具体的 Car 对象
my_car = Car('Toyota', 'red')# 使用 Car 对象的方法
my_car.start()
my_car.accelerate(20)
my_car.decelerate(10)
my_car.stop()