现在,我们已经使用对象,并知道Python中的一切都是一个对象,是时候定义什么是对象: 对象对象是数据(变量)和在该数据上操作的方法的集合对象和对象导向编程是 20 世纪 90 年代初流行的概念。早期的计算机语言,如C,没有对象的概念。然而,事实证明,物体是人类容易理解的范式 - 它可以用来模拟许多现实生活中的情况。现在,大多数(如果不是全部的话)新语言都有对象的概念。因此,你将要学习的东西在概念上也适用于其他语言。 由于对象是 Python 语言的构建基块,因此您也可以自己创建对象,这是合乎逻辑的。如果您想要创建自己的对象类型,您首先需要定义其方法以及它可以保存哪些数据。此蓝图称为类。 类类是一个或多个对象的蓝图所有 Python 对象都基于类。当我们创建对象时,我们称之为"创建类实例"。字符串、数字甚至嘘声也是类的实例。让我们探索与内置功能:type [size=1em][size=1em][size=1em]>>> type('a')
[size=1em]<class 'str'>
[size=1em]>>> type(1)
[size=1em]<class 'int'>
[size=1em]type(True)
[size=1em]<class 'bool'>
|
显然,有类称为,和。这些都是 Python 的一些本地类, 但我们也可以建立我们自己的类!strintbool 在 Python 中创建类和对象没有汽车类比,任何教程都是不完整的,因此,让我们做一个代表汽车的 Python 类。输入要输入的很多,并且必须从每个错误重新开始。随意尝试,但如果你想走捷径,我明白。只需复制并将以下文稿粘贴到您的Python REPL中。粘贴后,请务必点击输入两次: [size=1em][size=1em][size=1em]class Car:
[size=1em] speed = 0
[size=1em] started = False
[size=1em] def start(self):
[size=1em] self.started = True
[size=1em] print("Car started, let's ride!")
[size=1em] def increase_speed(self, delta):
[size=1em] if self.started:
[size=1em] self.speed = self.speed + delta
[size=1em] print('Vrooooom!')
[size=1em] else:
[size=1em] print("You need to start the car first")
[size=1em] def stop(self):
[size=1em] self.speed = 0
[size=1em] print('Halting')
|
别担心,我们将逐步结束此问题,但让我们首先创建并使用类型汽车的对象: [size=1em][size=1em][size=1em]>>> car = Car()
[size=1em]>>> car.increase_speed(10)
[size=1em]You need to start the car first
[size=1em]>>> car.start()
[size=1em]Car started, let's ride!
[size=1em]>>> car.increase_speed(40)
[size=1em]Vrooooom!
[size=1em]>>> _
|
Python 中的对象始终是类的实例。一个类可以有很多实例。我们刚刚创建了一个类实例,并将其分配给(小写)变量。创建实例看起来像调用函数:你以后会知道为什么的CarCar()car 接下来,我们称之为我们的汽车对象方法之一:试图提高它的速度,而它还没有开始。哎呀!只有启动汽车后,我们才能提高车速,享受它发出的噪音。 现在让我们一步一步地翻遍我们的汽车类: - Python 中的类使用类语句进行定义,后面跟着类的名称(汽车)。我们开始与结肠缩入代码块。
- 我们定义了两个变量,速度和开始。这是该类的所有实例都将具有的数据。
- 接下来,我们定义了三种在变量上操作的方法。
在这些方法的定义中,我们遇到了一些奇特的东西:它们都有一个论点,叫做自我作为他们的第一个论点。 蟒蛇里的自我是什么?老实说,如果你问我,这是Python不太优雅的语言结构之一。 还记得我们叫我们汽车物体的方法,像?我们不必通过变量,即使被定义为类内。car.start()selfstart()start(self) This is what’s happening: - 当我们在对象上调用方法时,Python 会自动填写第一个变量,我们按惯例称之为自数。
- 第一个变量是指对象本身,因此它的名字。
- 我们可以使用此变量来引用此对象的其他实例变量和功能,例如.self.speedself.start()
因此,仅在类定义中,我们使用引用实例中的一部分变量。要修改我们类的一部分变量,我们使用,而不仅仅是。通过使用,我们非常清楚地表明,我们是在一个变量上操作,该变量是此实例的一部分,而不是对象之外定义的并恰好具有相同名称的其他变量。selfstartedself.startedstartedself 创建多个对象由于一个类只是一个蓝图,你可以用它来创建多个对象,就像你可以建立多个相同的外观的汽车。它们的行为相似,但它们都有自己的数据,这些数据不在对象之间共享: [size=1em][size=1em][size=1em]>>> car1 = Car()
[size=1em]>>> car2 = Car()
[size=1em]>>> id(car1)
[size=1em]139771129539104
[size=1em]>>> id(car2)
[size=1em]139771129539160
|
我们在这里创建了两个汽车对象,car1 和 car2,并使用内置的方法 ID () 获取其 ID。Python 中的每个对象都有一个独特的标识符,因此我们刚刚证明我们创建了来自同一类的两个不同的对象。我们可以独立使用它们: [size=1em][size=1em][size=1em]>>> car1.start()
[size=1em]Car started, let's ride!
[size=1em]>>> car1.increase_speed(10)
[size=1em]'Vrooom!'
[size=1em]>>> car1.speed
[size=1em]10
[size=1em]>>> car2.speed
[size=1em]0
|
我们刚刚开始,并增加了它的速度,而仍然停止。检查的速度证实,这些都是不同的汽车与不同的状态!car1car2
|