一文掌握Python中的OOP的关键术语和概念

自由坦荡的智能 2025-04-15 04:58:36

Python 中的 OOP 简介

Python 是一种高级、面向对象的语言,允许构建和操作对象,使其成为复杂编程项目的绝佳选择。面向对象编程 (OOP) 的核心是一种范式,它通过使用类和对象对现实世界的实体进行建模来帮助构建和管理复杂的代码库。

在 OOP 中,类是定义对象的属性和行为的蓝图或模板。另一方面,对象是类的实例,拥有自己的一组属性(数据)和方法(操作该数据的函数)。

函数、参数和参数函数

函数是执行特定任务的代码块。它是使用def关键字定义的,可以调用它来执行任务。

一个独立的代码块。可以独立调用,而不是类或对象的一部分。通常返回一个值。# Functiondef greet(name): print(f"Hello, {name}!")# Calling the functiongreet("Asad") # Output: Hello, Asad!参数和参数

参数是函数定义中括号内列出的变量。

调用函数时接收值。是将要传递的实际值的占位符。

参数是调用函数时传递给函数的实际值。

# Function with parametersdef greet(name, age): # 'name', 'age' is a parameter print(f"Hello, {name}! You are {age} years old.")# Calling greet("Asad", 25) # 'Asad', 25 is an argument#Output: Hello, Asad! You are 25 years old.方法和属性方法

方法是在类内部定义并使用点符号 (.method() ) 对该类的实例进行操作的函数。

class Person: def greet(self, name): # Method print(f"Hello, {name}!")person = Person()person.greet("Asad") # Output: Hello, Asad!属性

属性是属于类实例的变量。它们保存有关该对象的数据。

以下是关于属性的一些要点:

实例属性:属于具体的对象实例。类属性:属于类本身,为所有实例共享。

属性可以是:

Public:可从班级外部访问。Private:只能在类内访问(用前导下划线_表示)。class Person: def __init__(self, name, age): # Constructor method self.name = name # instance attribute self.age = age # instance attribute occupation = "Unknown" # attribute# Creating an objectperson = Person("Asad", 25) # Output: Asad, 25name和age是公共实例属性,因为它们是在__init__方法内部定义的,并且可以使用对象名称直接访问(例如, person.name和person.age )。occupation是一个公共类属性,因为它是在__init__方法之外定义的,并且由该类的所有实例共享。class Person: def __init__(self, name, age): self._name = name # private instance attribute self.__age = age # private instance attribute with name mangling封装

封装是将数据(属性)和对数据进行操作的方法捆绑到一个称为类的单元中。这有助于:

隐藏内部实现细节保护数据免受外部干扰提供用于访问和修改数据的受控接口class Person: def __init__(self, name, age): self.__name = name # Private attribute self.__age = age # Private attribute def get_name(self): # Getter method return self.__name def get_age(self): # Getter method return self.__ageperson = Person("Asad", 25)print(person.get_name()) # Output: Asadprint(person.get_age()) # Output: 25抽象

抽象意味着隐藏复杂的实现细节并仅显示对象的基本特征。

class BankAccount: def __init__(self, balance): self.__balance = balance # Abstracted data def deposit(self, amount): self.__balance += amount # Abstracted control def get_balance(self): return self.__balance # Abstracted interface组合

组合是将对象或类组合成更复杂结构的一种方法。更简单地说,组合是对象之间的一种关系,其中一个对象(容器)拥有其他对象的集合。没有容器,所包含的对象就不完整,容器对其生命周期负责。

例子:

一所大学(容器)有多个部门(包含对象)一辆汽车(容器)有多个轮子(包含的物体)class Engine: def start(self): print("Engine started")class Car: def __init__(self): self.engine = Engine() # Composition def start_car(self): self.engine.start() # Using contained objectmy_car = Car()my_car.start_car() # Output: Engine started继承

继承是一种机制,其中一个类(子类)从另一个类(超类)继承属性和行为。子类继承了超类的所有属性和方法,还可以添加新的属性和方法,或者覆盖从超类继承的属性和方法。

例子:

Dog(子类)是 Animal(超类),具有特定于狗的附加属性和方法class Animal: def sound(self): # Method print('Generic sound')class Dog(Animal): # "Inheritance" Dog inherit from Animal def sound(self): # overriding the sound method print('Bark')dog = Dog()dog.sound()聚合

聚合是对象之间的一种关系,其中一个对象(容器)拥有其他对象的集合,但所包含的对象可以独立于容器而存在。

换句话说, 聚合是一种较弱的组合形式,其中包含的对象可以有自己的生命周期,并且可以在多个容器之间共享。

聚合和组合之间的主要区别:

组合:包含的对象不能独立于容器而存在。聚合:所包含的对象可以独立于容器而存在。class Book: def __init__(self, title, author): self.title = title self.author = author Library: def __init__(self): self.books = [] # aggregation def add_book(self, book): self.books.append(book) print(f'{book.title} by {book.author} added to the library')book1 = Book('The Catcher in the Rye', 'J.D. Salinger')library = Library()library.add_book(book1)book2 = Book('To Kill a Mockingbird', 'Harper Lee')library.add_book(book2)

Library类聚合了多个Book对象,每个Book都可以独立于Library存在。

重写方法

在面向对象编程中,重写方法是子类中的方法,其与其超类中的方法具有相同的名称、返回类型和参数列表。重写方法的目的是为子类提供与超类中的实现不同的特定实现。

当子类重写方法时,意味着子类正在提供自己的方法实现,该方法将被调用,而不是超类的实现。

class Animal: def sound(self): print('Generic sound')class Dog(Animal): def sound(self): # overriding the sound method print('Bark')dog = Dog()dog.sound()多态性

多态性允许方法互换使用,即使它们可能属于不同的类并具有不同的实现。在Python中,多态性允许将不同类的对象视为公共超类的对象。

多态性的类型:

方法多态性:名称相同但参数或行为不同的方法。运算符多态性:可以为自定义类重新定义运算符(+、-、*、/等)。函数多态性:可以定义函数来处理不同类型的数据。# Polymorphism -> Present the same interface for different data types.class Shape: def area(self): passclass Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): # Polymorphic method return (f'area of the circle is {3.14 * self.radius ** 2}')class Square(Shape): def __init__(self, side): self.side = side def area(self): # Polymorphic method return (f'area of square is {self.side ** 2}') shapes = [Circle(5), Square(5)]for shape in shapes: print(shape.area())# Output: area of the circle is 78.5 # area of square is 25
0 阅读:0

自由坦荡的智能

简介:感谢大家的关注