一文了解 Python 中的面向对象编程

360影视 2025-02-05 12:23 2

摘要:Python 是一种多功能编程语言,支持多种编程范例,包括面向对象编程 (OOP) 和过程编程。这种灵活性使开发人员可以根据项目的具体需求选择最合适的范例,结合每种方法的优势来实现最佳结果。

Python 是一种多功能编程语言,支持多种编程范例,包括面向对象编程 (OOP) 和过程编程。这种灵活性使开发人员可以根据项目的具体需求选择最合适的范例,结合每种方法的优势来实现最佳结果。

过程式编程基于过程调用的概念。它像菜谱一样构建程序,以函数和代码块的形式提供一组步骤,这些步骤顺序流动以完成任务。这种范例对于可以通过一系列过程步骤完成的简单任务特别有用,使代码易于理解和调试。

面向对象编程(OOP)是一种使用对象和类来构建软件程序的编程范例。它强调将数据(属性)和对数据进行操作的行为(方法)捆绑到称为对象的单个单元中。这种方法有利于对现实世界的实体进行建模、促进代码重用以及促进复杂软件系统的开发。

换句话说,OOP 是一种围绕数据或对象而不是功能和逻辑来组织软件设计的范例。对象可以定义为具有独特属性和行为的数据字段。 Python 对 OOP 的支持非常广泛,允许开发人员实现类、继承、多态性和封装(我们将详细了解所有内容),从而更轻松地创建可以模拟真实场景的复杂、可重用和模块化代码。

在面向对象编程和过程式编程之间进行选择取决于多种因素,包括应用程序的复杂性、团队偏好以及正在开发的软件的具体要求。一般来说,OOP 更适合具有复杂数据模型和行为、需要可重用和模块化代码的应用程序。另一方面,过程式编程可能更适合更简单的、基于任务的脚本,其中执行简单的操作序列。

在 OOP 中,类是创建对象的蓝图。它定义了创建的类对象将具有的一组属性和方法。类提供了一种将数据和功能捆绑在一起的方法。

Python 中的类可以想象是一个印章票。想象一下,您有一个设计用于生成特定形状或图案的印章 - 该印章是您的班级。每次将印章压到材料上时,您都会创建印章定义的形状或图案的精确复制品。这些副本类似于 Python 中的对象。正如图章封装了设计细节并且可以重复使用来生成多个副本(对象)一样,类封装了数据(属性)和行为(方法)并且可以多次实例化以创建多个对象。

每个对象都是一个独特的实例,可以在其属性中保存不同的值,类似于如何在不同的材料或不同的颜色上制作每个印章印象,但所有对象都共享相同的基础设计。

在 Python 中创建类非常简单明了:

class MyClass: # Class attribute attribute = "This is a class attribute." # Initializer / Instance attributes def __init__(self, value): self.instance_attribute = value # Method def my_method(self): return f"My instance attribute is: {self.instance_attribute}"

在此示例中, MyClass 具有类属性 attribute 、设置实例属性的初始化方法 __init__ 以及操作的方法 my_method 关于实例属性。

对象是类的实例。定义类时,只定义了对象的描述;因此,没有分配内存或存储空间。对象是在实例化时从类创建的。 每个对象的属性可以具有不同的值,以将其与同一类的其他对象区分开来(记住邮票示例)。

创建对象就像调用类一样简单:

my_object = MyClass("Hello, Object!")print(my_object.instance_attribute) # Accessing an instance attributeprint(my_object.my_method) # Calling a method on the objectoo

在面向对象编程 (OOP) 中,属性是属于类或类实例的变量。它们表示对象的属性或特征,有助于将其与其他对象区分开来。属性用于存储有关对象的信息,并且可以在对象的生命周期内访问或修改它们。

OOP 中有两种主要类型的属性:类属性和实例属性。

类属性是在类的所有实例之间共享的变量。它们属于类本身,而不属于任何单独的实例。这意味着,如果更改类属性的值,则更改会反映在该类的所有实例中。类属性示例:

class Dog: species = "Canis familiaris" # Class attribute def __init__(self, name, age): self.name = name # Instance attribute self.age = age # Instance attribute# Accessing a class attributeprint(Dog.species) # Output: Canis familiaris# Class attributes are shared by all instancesdog1 = Dog("Buddy", 5)dog2 = Dog("Molly", 3)print(dog1.species) # Output: Canis familiarisprint(dog2.species) # Output: Canis familiaris

类属性的主要应用之一是定义与类相关的全局常量。例如,考虑一个场景,您正在创建一个类来表示不同的形状。在 Circle 类中,您可以将 pi 的值指定为类属性,因为它是圆上下文中常用的常量。这有助于保持整个代码的一致性和清晰度。

实例属性由类的特定实例拥有。这意味着对于每个对象或类的实例,实例属性都是不同的(除非显式设置为相同的值)。

实例属性通常在 __init__ 方法中定义,也称为初始化器或构造函数,它们以 self 为前缀,表示它们属于特定的实例。类的实例。

class Dog: # Class attribute species = "Canis familiaris" def __init__(self, name, age): self.name = name # Instance attribute self.age = age # Instance attribute# Each instance has its own attributesdog1 = Dog("Buddy", 5)dog2 = Dog("Molly", 3)print(dog1.name) # Output: Buddyprint(dog2.name) # Output: Molly

理解属性是 OOP 的基础,因为它们对于定义对象的状态和区分类的不同实例至关重要。它们允许对象在对其进行操作的函数之间维护状态,从而实现对象内数据的封装。

Python 中的方法是在类中定义的函数,用于定义对象的行为。它们可以对类包含的数据(属性)进行操作,并且可以使用类的对象进行访问。方法对于实现对象的功能至关重要。

Python中有几种类型的方法:

实例方法:对类的实例进行操作并有权访问实例 ( self ) 及其属性。类方法:对类本身进行操作,而不是对类的实例进行操作。它们用 @classmethod 装饰器标记,并以 cls 作为第一个参数。静态方法:不要对实例或类进行操作。它们用 @staticmethod 装饰器标记,并且不将 self 或 cls 作为第一个参数。它们用于不访问类或实例数据的实用函数。

为了说明 Python 中方法的使用,创建一个类 Car 来演示实例方法、类方法和静态方法。此示例将有助于阐明如何在类中使用不同类型的方法来操作数据和管理行为。

class Car: # Class attribute total_cars = 0 def __init__(self, make, model, year): self.make = make self.model = model self.year = year Car.total_cars += 1 # Increment the total number of cars each time a new car is created # Instance method def description(self): """Returns a description of the car.""" return f"{self.year} {self.make} {self.model}" # Class method @classmethod def total_cars_created(cls): """Returns the total number of cars created.""" return f"Total cars created: {cls.total_cars}" # Static method @staticmethod def is_vintage(year): """Determines if a car is vintage based on its year.""" return year

现在,让我们使用 Car 类创建一些汽车对象,调用实例方法,使用类方法获取创建的汽车总数,并使用静态方法检查汽车是否被视为老式汽车。

# Creating car objectscar1 = Car("Toyota", "Corolla", 1985)car2 = Car("Ford", "Mustang", 1968)# Using an instance methodprint(car1.description) # Output: 1985 Toyota Corollaprint(car2.description) # Output: 1968 Ford Mustang# Using a class methodprint(Car.total_cars_created) # Output: Total cars created: 2# Using a static methodprint(Car.is_vintage(1985)) # Output: Trueprint(Car.is_vintage(1995)) # Output: False实例方法: description 方法是实例方法,因为它对 Car 类 ( self ) 实例的属性进行操作。它提供了描述汽车的格式化字符串。类方法: total_cars_created 方法是一个类方法,如 @classmethod 装饰器所示。它对类本身( cls )而不是类的实例进行操作。此方法访问类属性 ( total_cars ) 以返回创建的 Car 实例的总数。静态方法: is_vintage 方法是静态方法,用 @staticmethod 装饰器标记。它不使用 self 或 cls 作为参数,使其独立于类和实例状态。它执行简单的检查,根据老式汽车必须是 1990 年之前的标准,确定给定年份的汽车是否符合老式汽车的资格。

此示例演示如何在 Python 类中定义和使用实例方法、类方法和静态方法,展示它们在面向对象编程方法中组织和管理数据和行为方面各自的用途和优点。

实例方法是 Python 中面向对象编程 (OOP) 的基本概念。它们用于定义可以使用类实例执行的行为和操作。了解实例方法对于在 Python 中设计和实现封装数据以及对该数据的操作的类至关重要。

实例方法是在类内部定义的、作用于该类实例的函数。它们可以访问和修改实例的状态,因为它们包含对实例本身的引用,通常名为 self 。这个 self 参数是 Python OOP 中的约定,允许实例方法访问同一对象上的属性和其他方法。

要定义实例方法,只需在类中声明一个函数即可。该方法的第一个参数必须是 self ,它是对调用该方法的实例的引用。这允许该方法访问和操作实例的属性。

下面用一个基本的例子来说明实例方法的定义和使用:

class Person: def __init__(self, name, age): self.name = name self.age = age # Instance method def introduce_yourself(self): print(f"Hello, my name is {self.name} and I am {self.age} years old.")# Creating an instance of the Person classperson1 = Person("Alice", 30)# Calling an instance method on the person1 instanceperson1.introduce_yourself

在此示例中, introduce_yourself 是 Person 类的实例方法。它通过 self 参数访问实例 person1 的 name 和 age 属性来打印问候语。

访问实例属性:实例方法可以自由访问和修改附加到其所属实例的属性。第一个参数是 self :实例方法中的 self 参数指的是调用该方法的实例,它允许该方法访问实例的属性和其他方法。在实例上调用:与类方法或静态方法不同,实例方法是在特定对象实例上调用的,而不是在类本身上调用的。

在数据科学和工程项目的背景下,实例方法可用于封装与自定义类中的数据处理、分析和可视化相关的功能。例如,您可能有一个包装 pandas DataFrame 的 DataFrameWrapper 类,该类的实例方法可能包含清理数据、执行计算或生成特定于数据集的绘图的功能。

理解和利用实例方法可以使数据项目中的代码更有组织性、可读性和可维护性,并遵循 OOP 中的封装和抽象原则。

类方法是 Python 面向对象编程 (OOP) 的一个重要功能,它允许您定义对类本身而不是类的实例进行操作的函数。这些方法遵循 @classmethod 装饰器,并通过使用 cls 作为其第一个参数来区分,该参数表示类本身,类似于 self 表示实例的方式实例方法中的类。

类方法只能访问类本身及其属性;他们无权访问实例级数据。这意味着在类方法中,您无法直接访问或修改实例属性。相反,类方法通常用于涉及整个类而不是单个实例的操作。

定义和使用类方法

要定义类方法,请在方法定义上方使用 @classmethod 装饰器。类方法的第一个参数通常命名为 cls ,它是对调用该方法的类的引用。这允许类方法访问类变量和其他类方法。

下面是一个示例来演示如何定义和使用类方法:

class Employee: num_of_employees = 0 # Class variable def __init__(self, name, salary): self.name = name self.salary = salary Employee.num_of_employees += 1 @classmethod def get_num_of_employees(cls): return f"Total number of employees: {cls.num_of_employees}"# Accessing a class method without creating an instanceprint(Employee.get_num_of_employees)# Creating instances of Employeeemp1 = Employee("John", 50000)emp2 = Employee("Doe", 60000)# Accessing the class method after creating instancesprint(Employee.get_num_of_employees)

在此示例中, get_num_of_employees 是一个返回员工总数的类方法,这是一个跟踪从 Employee 类创建的实例数量的类变量。请注意我们如何在 Employee 类本身上调用 get_num_of_employees ,而无需创建该类的实例。

类方法的主要特征

当需要执行与整个类而不是单个实例相关的操作时,类方法特别有用。在数据科学项目中,类方法可用于实现从不同格式的数据创建实例的工厂方法,以跟踪与所有实例相关的统计信息,或为数据处理类配置全局设置。

例如,如果您有一个处理数据集的类,则可以使用类方法来设置类级别参数,该参数定义要由该类的所有实例处理的数据文件(CSV、JSON 等)的默认格式。这种方法促进了干净、有组织和模块化的代码库,促进了数据项目更好的维护和可扩展性。

Python 面向对象编程 (OOP) 中的静态方法是一种既不操作类实例(如实例方法),也不操作类本身(如类方法)的方法。它们是属于类的实用函数,但不访问或修改类或特定于实例的数据。静态方法用 @staticmethod 装饰器标记,并且不将 self 或 cls 作为第一个参数。

要定义静态方法,请在方法定义上方使用 @staticmethod 装饰器。由于静态方法不对类或实例进行操作,因此它们不需要 self 或 cls 参数。它们可以采用任意数量的参数,也可以不采用任何参数,具体取决于方法的设计目的。

下面是一个演示静态方法的定义和用法的示例:

class MathOperations: @staticmethod def add(x, y): return x + y @staticmethod def multiply(x, y): return x * y# Using static methods without creating an instance of the classprint(MathOperations.add(5, 7)) # Output: 12print(MathOperations.multiply(3, 4)) # Output: 12

在此示例中, add 和 multiply 是 MathOperations 类的静态方法,分别执行加法和乘法。这些方法在类本身上调用,而不需要实例化类的对象。

静态方法非常适合执行与类的核心职责不直接相关的任务的实用程序或辅助函数。在数据科学和工程项目中,静态方法可用于通用的计算、数据验证或处理步骤,与类或其实例的特定状态无关。

例如,如果您有一个处理数据转换的类,则可以包含用于验证数据格式、清理字符串或在测量单位之间进行转换的静态方法。这些方法与类的域相关,但不需要访问类或实例数据,这使它们成为静态方法的完美候选者。

使用静态方法有助于保持代码的组织性、模块化和更易于理解,因为它清楚地区分了属于对象行为的操作和通用实用程序的操作。

Python 中的面向对象编程提供了一种强大而直观的方法来建模现实世界的实体并构建复杂的应用程序。通过理解和使用类、对象和方法,开发人员可以编写更加模块化、可重用且易于理解的代码。

本文标志着一个启发性系列的开始,旨在探索面向对象编程 (OOP) 在数据科学、机器学习、深度学习和大型语言模型 (LLMs) 领域的应用。

我们的 Python OOP 错综复杂的旅程不仅仅是理解语法或记忆模式;还包括理解语法或记忆模式。这是关于拥抱一种范式,可以从根本上改变我们在这些先进领域解决问题的方式。

OOP 提供了一种结构化且可扩展的方式来管理复杂的软件项目,包括数据密集型应用程序。通过将数据和行为封装到对象中,我们可以更自然地对现实世界的现象进行建模,使我们的代码更加直观、可维护和可重用。

这在数据科学和机器学习中尤其重要,其中数据和算法的复杂性需要 OOP 唯一有资格提供的组织和抽象级别。

随着我们深入研究本系列,我们将探索如何应用 OOP 原则来设计强大的数据模型、实现机器学习算法、管理大型数据集和构建可扩展的数据管道。我们还将研究 OOP 如何增强 LLMs 工具和框架的开发,从而促进创建更复杂和用户友好的界面来与这些强大的模型进行交互。

从类、对象和方法的基本概念到继承、多态性和设计模式等更高级的主题,本系列旨在为您提供在数据科学和机器学习项目中利用 OOP 的知识和技能。无论您是分析大量数据集、构建预测模型还是开发尖端的 AI 应用程序,了解 OOP 都将为支持您的工作提供坚实的基础。

请记住,通过 OOP 的旅程类似于掌握一种新的思维方式。它是通过对象及其交互的视角来看待编程世界,这种视角可以为复杂问题提供更优雅、更有效的解决方案。

因此,无论您是渴望学习基础知识的初学者,还是希望在数据科学和机器学习背景下加深对 OOP 理解的经验丰富的程序员,本系列都将成为宝贵的资源。加入我们,开始这一激动人心的探索,让我们释放 OOP 在数据科学、机器学习等方面的全部潜力。

这只是一个开始,当我们一起继续这一旅程时,我迫不及待地想分享我的学习笔记和经验中的更多见解。

来源:自由坦荡的湖泊AI

相关推荐