Python 教程 22 Python 面向对象的属性和方法

小夏 科技 更新 2024-02-01

在 Python 面向对象编程中,属性和方法是类及其对象的重要组成部分。 如果说封装、继承和多态是面向对象编程的思想,那么类的属性和方法就是骨架,因为属性和方法,面向对象编程就成了血肉之躯。

属性是类或对象所拥有的数据,用于描述对象的特征和状态。 特性可以是实例属性(特定于对象的属性)或类属性(属于类本身的属性)。 可以使用点运算符来访问和修改属性的值。

实例属性是属于对象实例的属性。 每个对象实例都有自己的一组实例属性,这些属性的值可能会在对象的生存期内更改。

假设我们想定义一个名为"car"代表汽车信息的类具有品牌。 我们可以使用实例属性来表示此信息。

class car:

def __init__(self, brand):

self.brand = brand

在上面的**中,我们定义了一个"car"类,它有一个实例属性:Brand。 类中的构造函数__init__我们使用 self 关键字来引用当前实例对象,并使用点运算符为实例属性赋值。 现在,我们可以创建一个"car"对象,并访问其实例属性:

car1 = car("toyota")

print(car1.品牌)输出: 丰田

在上面的**中,我们创建了一个名为"car1"之"car"对象,并已访问其实例属性品牌,即输出结果"toyota"。可以注意到,每个实例对象都有自己独立的实例属性集,并且可以根据特定对象的需要进行不同的分配。 例如,我们可以创建另一个"car"对象,为其品牌属性赋予不同的价值:

car2 = car("tesla")

print(car2.品牌)输出:特斯拉

在上面的**中,我们创建了一个名为"car2"之"car"对象,并已访问其实例属性品牌,即输出结果"tesla"。实例属性允许我们通过实例来描述对象的特定特征和状态。 每个实例对象都具有相互独立的实例属性,并且可以随时修改,这使得面向对象编程更加灵活和可扩展。

类特性是属于类的特性,它是该类的所有实例共享的特性。 类属性独立于任何一个实例对象,通常用于定义类的共享数据。

假设我们想定义一个名为"car"表示汽车信息的类具有品牌属性和数量属性。 我们可以使用类属性来表示此信息。

class car:

brand = "toyota"

count = 0

def __init__(self, model):

self.model = model

car.count += 1

在上面的**中,我们定义了一个"car"类,它有两个类属性:brand 和 count。 类中的构造函数__init__,我们使用 self 关键字来引用当前实例对象,并使用点运算符为实例属性模型赋值。 同时,每次我们创建一个新的 CAR 对象时,我们都会在 count class 属性的值上加 1 来统计 CAR 对象的数量。 现在,我们可以创建几个"car"对象,并访问其类属性和实例属性:

car1 = car("corolla")

car2 = car("r**4")

print(car.品牌)输出: 丰田

print(car.count) 输出: 2

print(car1.模型)输出:花冠

print(car2.型号) 输出: R**4

print(car1.品牌)输出: 丰田

print(car2.品牌)输出: 丰田

在上面的**中,我们创建了两个"car"对象"car1"跟"car2"。我们首先使用类名来访问类属性 brand 和 count,输出结果分别为"toyota"(全部。"car"对象的共享品牌属性)和 2(已创建)"car"对象数)。然后,我们通过对象名称访问实例属性模型,输出结果分别为"corolla"跟"r**4"。可以注意到,每个对象实例都有自己独立的实例属性模型。 最后,我们通过对象名称访问类属性品牌,输出是两者"toyota"。这是因为类属性由类的所有实例共享,因此每个对象实例都可以访问和修改类属性。 类属性允许我们在类级别定义和管理共享数据。 类的所有实例都可以通过类名访问和修改类属性,从而更容易以统一的方式共享和管理数据。

方法是在绑定到该类的类中定义的函数。 方法可以访问和操作类的属性,并且可以由类的实例调用。 方法分为实例方法、类方法和静态方法。

实例方法是在类中定义的方法,它绑定到对象实例,该对象实例可以访问方法内部的实例属性,并用于操作对象实例的行为self关键字来引用调用该方法的对象的实例。 假设我们仍在将其带到"car"例如,除了原始的实例属性外,我们还有一个与速度相关的属性,并显示当前的速度。 此方法位于实例级别,表示特定对象实例的行为,我们可以使用 instance 方法实现该行为。

class car:

def __init__(self, brand, model):

self.brand = brand

self.model = model

self.speed = 0

def accelerate(self, increment):

self.speed += increment

def decelerate(self, decrement):

if self.speed >= decrement:

self.speed -= decrement

else:self.speed = 0

def show_speed(self):

print("current speed:", self.speed, "km/h")

在上面的**中,我们定义了一个"car"类,它有三个实例属性:Brand、Model 和 Speed。 此外,我们还定义了三种实例方法:加速、减速和显示速度。 在该方法中,我们使用 self 关键字来引用当前实例对象的属性,并通过增加或减少 speed 属性来加速和减速。 show speed 方法用于在终端中显示当前汽车的速度信息。 现在,我们可以创建一个"car"对象,并调用其实例方法:

car1 = car("toyota", "corolla")

car1.accelerate(40)

car1.show speed() 输出: 当前速度: 40 km h

car1.decelerate(20)

car1.show speed() 输出: 当前速度: 20 km h

在上面的**中,我们创建了一个名为"car1"之"car"对象,然后调用其 accelerate 和 then deelerate 方法。 然后,通过调用show speed方法打印出当前汽车的速度信息。

实例方法允许我们为对象实例定义特定行为。 每个实例对象都可以调用一个实例方法,每次调用该方法时,该方法都可以根据对象实例的特定属性值在内部执行不同的操作。 这使我们能够轻松操作和控制对象行为,从而实现更灵活和可定制的功能。 以汽车为例,我们通过示例方法实现了汽车的加速、减速、显示速度等功能。

类方法是绑定到类本身的方法,类方法由可以访问和修改方法内部的类属性的装饰器@classmethod标记。 与实例方法不同,类方法对整个类进行操作,不依赖于特定的实例对象。 下面是一个示例,用于详细说明类方法的概念和用法。

class car:

total_cars = 0

def __init__(self, brand, model):

self.brand = brand

self.model = model

car.total_cars += 1

classmethod

def get_total_cars(cls):

return cls.total_cars

在上面的**中,我们定义了一个"car"类,它有两个实例属性:brand 和 model,以及一个类属性 Total cars。 此外,我们还使用 classMethod 修饰器修饰了 Get Total Cars 方法,将其定义为类方法。 在 Get Total Cars 方法中,我们通过 cls 关键字引用当前类对象,这使我们能够访问类属性 Total Cars。 现在,我们可以创建多个"car"对象并调用类方法:

car1 = car("toyota", "corolla")

car2 = car("honda", "civic")

car3 = car("ford", "mustang")

print(car.获取 total cars()) 输出: 3

在上面的**中,我们创建了三个不同的"car"object 并获取通过调用 class 方法 get total cars 创建的 Car 对象的数量。 输出为 3,表示已创建三个 CAR 对象。 需要注意的是,类方法可以直接通过类名调用,不需要创建对象实例。 而且,无论类方法是由类名还是对象实例调用,它们都能够访问和操作类级属性和方法。 类方法通常用于处理类级操作,例如计数器、对类属性的访问和修改。 在汽车示例中,我们使用类方法 Get Total Cars 来获取到目前为止已创建的汽车对象的数量,因为汽车总数由整个类共享。

静态方法在一个类中定义,静态方法独立于对象实例和类中的类,用装饰器@staticmethod标记,与实例方法和类方法不同,静态方法不需要访问实例属性或类属性,它是一种独立于实例和类的方法。

class car:

def __init__(self, brand, model, distance, time):

self.brand = brand

self.model = model

self.distance = distance

self.time = time

staticmethod

def calculate_**erage_speed(distance, time):

return distance / time

def get_info(self):

print(f"brand: ")

print(f"model: ")

print(f"distance: km")

print(f"time: hours")

print(f"**erage speed: km/h")

car = car("toyota", "corolla", 400, 5)

car.get_info()

在上面的**中,我们定义了一个"car"类中,构造函数接收四个参数:Make、Model、Distance Traveled 和 Time Required。 然后,我们使用静态方法calculate_**erage_speed计算平均速度,即行进距离除以所需时间。 在get_info在该方法中,我们打印汽车的品牌、型号、行驶距离、所需时间和平均速度(通过调用静态方法)。

运行上述 **,您将获得以下输出:

brand: toyota

model: corolla

distance: 400 km

time: 5 hours

*erage speed: 80.0 km/h

从输出中可以看出,我们成功获取了汽车的信息并计算了平均速度。 通过使用静态方法,我们封装了计算类中平均速度的逻辑,使其更加清晰和可维护。 同时,静态方法可以直接通过类名调用,而无需先创建 car 对象的实例。 需要注意的是,静态方法可以由类中的所有实例共享,也可以由类本身直接调用。 静态方法提供了一种方便的方式来执行与类相关的操作,而无需访问实例或类属性。

相似文章

    Python 教程:Python 变量的 6 种基本类型

    学习一门编程语言,你必须忽略变量的概念。Python 中的变量是用于存储数据的数据的名称,您可以为变量赋值,并使用该变量在程序中的其他位置引用该值。变量在程序中扮演存储和操作数据的角色。如果你已经学习了 C C 语言,在定义变量后,你需要添加一种限制类型,例如 intage doublemoney ...

    python新手教程很简单

    Python 新手教程。Python 是一种简单易学 功能强大的编程语言,具有简洁的语法和丰富的库,使 Python 成为初学者的理想选择。以下是一些简单的示例,可帮助您开始 Python 编程。首先,我们需要安装 python。您可以从 Python 网站 安装最新版本的 Python。安装完成后...

    Python 教程:浮点运算揭秘

    嗨,大家好,欢迎来到我的python教程专栏!今天我们要讲的是Python中一个非常有趣的话题 浮点运算。在我们的日常编码中,我们可能会遇到一些令人烦恼的浮点运算,让我们一起揭开这个谜团的神秘面纱吧!问题的本质 十进制与二进制 首先,让我们了解浮点数在计算机中是如何表示的。在硬件级别,浮点数表示为基...

    Python 教程列表工具

    嗨,大家好!今天,我们将深入探讨 Python 中一些强大的列表工具,让您的编程之旅更加得心应手。Python教程编程技巧 .阵列模块 首先,我们来谈谈阵列模块。该模块为我们提供了一个更紧凑 更高效的列表,特别适合存储相似的数据。看看这个例子,我们可以存储双字节无符号二进制数字数组,而不是通常的 p...

    Python 教程:十进制浮点运算

    嗨,大家好,欢迎回到我的 Python 教程专栏!今天,我们将深入探讨一个在金融应用和其他需要精确十进制表示法的领域中非常重要的主题 十进制浮点运算。在 Python 中,我们通常使用二进制浮点数进行算术运算,但在一些特殊场景下,例如财务计算,我们需要更高的精度和可控性。这就是十进制浮点运算的用武之...