跳至主要内容

Python 中的类

Classes in Python

Python 中的类允许开发者为其代码创建可重用的组件,使其更容易维护和修改。在本文中,我们将探讨 Python 中类的基础知识,以及如何在项目中有效地使用它们。

面向对象编程的基本原则

面向对象编程 (OOP) 是一种编程范例,它使用 对象 及其交互来设计应用程序。Python 是一种面向对象编程语言,它支持以下 OOP 概念

  1. 封装:封装是将数据(属性)和方法捆绑在类中的机制。它隐藏对象的内部细节,并提供公共接口与之交互。封装有助于实现数据抽象和代码模块化。

  2. 继承:继承允许一个类(子类)从另一个类(超类)继承属性和方法。子类可以在继承超类共同特征的同时扩展或修改继承的行为。继承促进了代码可重用性,并支持“是-一种”关系。

  3. 多态:多态允许将不同类的对象视为公共超类的对象。它允许使用单个接口来表示不同类型的对象。多态是通过方法重写和方法重载实现的。

  4. 抽象:抽象专注于表示对象的本质特征,同时隐藏不必要的细节。它允许程序员创建抽象类和方法来定义共同行为,将实现细节留给子类。

Python 中的类是什么

在 Python 中,类是创建对象(也称为实例)的蓝图。它定义了一组属性(变量)和方法(函数),从该类创建的对象将拥有这些属性和方法。换句话说,类充当创建具有预定义特征和行为的对象的模板或结构。

如何在 Python 中创建类

class 关键字用于创建类。以下是一个简单的 Person 类的示例

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def greet(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

person = Person("John", 30)
person.greet()

# Output:
# 
# Hello, my name is John and I am 30 years old.

在此示例中,Person 类有两个属性 nameage,以及一个方法 greet,用于打印问候消息。__init__ 方法是一个构造函数,用于初始化对象的属性。要创建 Person 类的对象,我们使用类构造函数并传入必需的参数。

继承是一种允许子类继承其超类的属性(方法和属性)的机制。多态允许将不同类的对象视为同一种类型。

利用类的优势

Python 类是创建具有属性和方法集的对象的蓝图。它是面向对象编程中的一个基本概念。以下是利用类的部分好处

  • 代码组织:类允许您将相关数据和功能组合到单个代码块中。这提高了代码可读性,减少了重复,并使维护和更新代码变得更容易。

  • 继承:类可用于创建继承现有类属性和方法的新类。这允许你重用代码并避免编写冗余代码。

class Employee:
    """A class representing an employee."""

    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

    def get_salary(self):
        return self.salary

    def set_salary(self, new_salary):
        self.salary = new_salary

class Manager(Employee):
    """A class representing a manager, inheriting from Employee."""

    def __init__(self, name, salary, bonus):
        super().__init__(name, salary)
        self.bonus = bonus

    def get_salary(self):
        return self.salary + self.bonus

如何创建 Python 对象

对象是类的实例,它封装了数据以及用于操作该数据的函数或方法。创建对象涉及定义一个类,然后使用类构造函数实例化类。

创建 Python 对象的示例


class Car:
    def __init__(self, make, model):
        self.make = make
        self.model = model
    
    def get_make(self):
        return self.make
    
    def get_model(self):
        return self.model

new_car = Car("Toyota", "Camry")
print(new_car.get_make())
print(new_car.get_model())

# Output:
# Toyota
# Camry

要创建 Python 对象,你需要定义一个类,然后使用类构造函数实例化类。然后,你可以调用对象的函数或访问对象的属性。通过这些示例,你可以在自己的项目中开始创建 Python 对象。

在 Python 中定义类

在 Python 中创建类是使用关键字 class 完成的。Python 中的类允许创建具有属性和方法的对象。

以下代码定义了一个名为 Car 的简单类,并创建了该类的实例,称为 my_car

类定义示例

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

my_car = Car("Toyota", "Corolla", 2022)

在此示例中,__init__ 方法用于Python 类初始化self 参数引用正在创建的对象实例。makemodelyear 参数是对象的属性,可以使用点表示法访问和修改。最后,使用 my_car 变量创建 Car 类的实例,向其传递参数 ToyotaCorolla 和 2022。

以下示例定义了一个名为 BankAccount 的更复杂的类

复杂类示例

class BankAccount:
    def __init__(self, account_number, balance):
        self.account_number = account_number
        self.balance = balance
        self.transactions = []

    def deposit(self, amount):
        self.balance += amount
        self.transactions.append(("deposit", amount))

    def withdraw(self, amount):
        if amount > self.balance:
            raise ValueError("Not enough funds")
        self.balance -= amount
        self.transactions.append(("withdrawal", amount))

my_account = BankAccount("123456", 500)
my_account.deposit(200)
my_account.withdraw(50)

在此示例中,BankAccount 类使用 __init__ 定义,该 __init__ 设置 account_numberbalance 属性。还初始化了一个 transactions 列表,它将跟踪帐户上的所有交易。可以对 BankAccount 对象调用 depositwithdraw 方法来修改帐户余额并添加交易。最后,my_account 变量作为 BankAccount 对象创建,其初始余额为 500,并且该帐户使用 depositwithdraw 进行修改。

这些示例说明了在 Python 中定义类的基础知识,包括使用 class 关键字、使用 __init__ 方法初始化对象以及创建实例方法以修改对象属性。

类和实例之间的区别

Python 中的类是创建对象的蓝图。对象是类的实例,它可以具有属性(变量)和方法(函数)。

要在 Python 中创建类,我们使用 class 关键字,后跟类名。这是一个例子

class Dog:
   def __init__(self, name, breed):
      self.name = name
      self.breed = breed

   def bark(self):
      print("Woof!")

my_dog = Dog("Fido", "Labrador")

print(my_dog.name) 

print(my_dog.breed) 

my_dog.bark() 

在此示例中,我们创建了一个 Dog 类,其中包含两个属性(namebreed)和一个方法(bark)。__init__ 方法是一个特殊方法,当我们创建类的实例时会调用该方法。

要在 Python 中创建类的实例,我们只需像调用函数一样调用类并传入任何必要的参数。

在此示例中,我们创建了 Dog 类的实例并将其分配给变量 my_dog。我们传递了两个参数(FidoLabrador),用于设置对象的 namebreed 属性。

然后,我们可以使用点表示法访问对象的属性和方法。

总之,Python 中的类允许我们创建具有属性和方法的对象,并且通过像调用函数一样调用类来创建类的实例。

Python 中的方法与函数

Python 方法和函数是 Python 中的两个关键编程概念。方法是与对象关联的函数,而函数不与任何对象关联。换句话说,方法是属于类的函数,而函数不与任何类关联。

在 Python 中,方法通常以 object.method() 的形式调用,而函数以 function() 的形式调用。方法用于对对象执行操作或 return 与对象相关的值。另一方面,函数用于对数据执行任务或操作并 return 结果。

这里有两个示例来区分方法和 Python 中的函数

方法示例

# Define a list
my_list = [1, 2, 3, 4, 5]

# Use the append method to add a value to the list
my_list.append(6)

# Print the updated list
print(my_list)  # Output: [1, 2, 3, 4, 5, 6]

在上面的示例中,append() 方法与 my_list 对象关联。它将值 6 添加到列表中。

函数示例

# Define a function to calculate the area of a rectangle
def calculate_area(length, width):
    area = length * width
    return area

# Call the function with two arguments
rectangle_area = calculate_area(5, 10)

# Print the area of the rectangle
print(rectangle_area)  # Output: 50

在上面的示例中,calculate_area() 函数与任何对象无关。它采用两个参数 lengthwidth,并返回矩形的 area

总之,虽然方法和函数可能有一些相似之处,但它们之间的主要区别在于方法与对象相关,而函数则不然。了解何时使用方法和函数是 Python 编程的一个重要方面。

调用类方法

在 Python 中,类方法使用 @classmethod 装饰器定义。类方法可以由类或类的实例调用。

要在 Python 中调用类方法,可以使用以下语法

class MyClass:
    def __init__(self, name):
        self.name = name

    @classmethod
    def greet(cls):
        print(f"Hello from {cls.__name__}!")

    def say_hello(self):
        print(f"Hello, {self.name}!")

# Invoking class method without creating an instance
MyClass.greet()

# Creating an instance and invoking instance method
obj = MyClass("Alice")
obj.say_hello()

在此示例中,我们有一个名为 MyClass 的类,它有两个方法:greet()say_hello()

greet() 方法是一个用 @classmethod 装饰的类方法。它采用 cls 参数,该参数引用类本身。它打印一条问候消息以及类的名称。

say_hello() 方法是一个实例方法。它采用 self 参数,该参数引用类的实例。它使用实例的 name 属性打印一条个性化问候消息。

要调用类方法,可以在类本身上直接调用它,而无需创建实例。

在 Python 中实现类树

在 Python 编程中,类是创建具有共同属性和方法的对象的蓝图。类树表示类的层次结构,其中每个类都从其父类或超类继承属性和方法。

类树示例

class Animal:
    def __init__(self, name, sound):
        self.name = name
        self.sound = sound

    def make_sound(self):
        return self.sound

class Dog(Animal):
    def __init__(self, name, sound):
        Animal.__init__(self, name, sound)

dog = Dog("Rufus", "Woof")
print(dog.make_sound())   # Output: Woof

在此示例中,我们定义了两个类,AnimalDogDog 类使用语法 class Dog(Animal):Animal 类继承。Dog 类有自己的构造函数 (__init__),但也会调用其父类的构造函数 (Animal.__init__(self, name, sound))。

更复杂的类树示例

class A:
    def method(self):
        print("Method of class A")

class B:
    def method(self):
        print("Method of class B")

class C(A, B):
    pass

c = C()
c.method()  # Output: Method of class A

在此示例中,我们定义了三个类 ABCC 类使用语法 class C(A, B):AB 继承。在 C 对象上调用 method 函数时,它解析为 A 方法,因为 A 在继承链中首先列出。

面向对象编程的精髓:代码可重用性

面向对象编程 (OOP) 是一种流行的软件编程范例,它强调创建可重用的代码组件。OOP 编程在 Python 中很强大,因为它能够以类和 模块 的形式实现此类可重用代码。

Python 中的类导入

Python 是一种面向对象的语言,这意味着类在其设计中扮演着核心角色。要从另一个模块访问类方法和属性,必须使用 import 语句 导入类:from module_name import Class_Name

继承

在 Python 中,继承允许一个类继承另一个类的属性和方法。这有助于代码重用,使得创建新类变得容易,而无需从头开始重写代码。

如何从两个类继承

Python 还允许一个类从两个类继承,并称之为两级继承。在这种情况下,新类从已经从另一个类继承的类继承。

class A:
    def hello(self):
        print("Hello from A")

class B(A):
    pass

class C(B):
    pass

obj = C()
obj.hello() # Output: Hello from A

在上面的代码中,类 C 继承自类 B,而类 B 已经继承自类 A,因此可以访问这两个类中的方法。

如何在 Python 中从多个类继承

Python 允许一个类同时从多个类继承。这称为多重继承,它使新类具有这两个类的特征。

class A:
    def hello(self):
        print("Hello from A")

class B:
    def hi(self):
        print("Hi from B")

class C:
    def greet(self):
        print("Greet from C")

class D:
    def good_morning(self):
        print("Good_morning from D")

class E(A,B,C, D):
    pass

obj = E()
obj.hello() # Output: Hello from A
obj.hi() # Output : Hi from B
obj.good_morning() # Output : Good_morning from D

在上面的代码中,类 EABCD 类继承,并且可以访问所有这些类中的方法。

与我们合作!

不要犹豫,在 GitHub 上为 Python 教程做出贡献:创建一个分支,更新内容并发出拉取请求。

Profile picture for user AliaksandrSumich
Python 工程师,第三方 Web 服务集成专家。
更新:05/03/2024 - 22:41
Profile picture for user angarsky
已审阅并批准