小白教程

 找回密码
 立即注册
查看: 6599|回复: 0

[好文转载] Python 中的类和对象是什么?

[复制链接]

2

主题

6

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2021-5-28 14:33:00 | 显示全部楼层 |阅读模式
现在,我们已经使用对象,并知道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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-9-20 14:49 , Processed in 0.032988 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表