ZetCode

Python 方法

最后修改于 2025 年 2 月 25 日

Python 中的方法是定义在类内部的函数。它们用于定义对象的行为。Python 支持三种类型的方法:实例方法、类方法和静态方法。本教程将通过实际示例涵盖每种类型。

方法允许对象执行操作和与数据交互。理解实例方法、类方法和静态方法之间的区别是编写简洁高效 Python 代码的关键。

实例方法

实例方法是最常见的方法类型。它们将 `self` 作为第一个参数,它引用类的实例。

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

    def bark(self):
        return f"{self.name} says woof!"

dog = Dog("Buddy")
print(dog.bark())  # Output: Buddy says woof!

`bark` 方法是一个实例方法。它可以使用 `self` 访问和修改实例的属性。

类方法

类方法使用 `@classmethod` 装饰器定义。它们将 `cls` 作为第一个参数,它引用类本身。

class_method.py
class Dog:
    species = "Canis familiaris"

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

    @classmethod
    def get_species(cls):
        return cls.species

print(Dog.get_species())  # Output: Canis familiaris

`get_species` 方法是一个类方法。它可以访问类级别的属性,但不能访问实例特定的数据。

静态方法

静态方法使用 `@staticmethod` 装饰器定义。它们不将 `self` 或 `cls` 作为参数,行为类似于常规函数。

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

    @staticmethod
    def is_dog_sound(sound):
        return sound == "woof"

print(Dog.is_dog_sound("woof"))  # Output: True
print(Dog.is_dog_sound("meow"))  # Output: False

`is_dog_sound` 方法是一个静态方法。它不依赖于实例或类,用于实用函数。

何时使用每种方法

实际示例

此示例在单个类中演示了所有三种类型方法的用法。

methods_example.py
class Calculator:
    def __init__(self, value):
        self.value = value

    # Instance method
    def add(self, num):
        self.value += num
        return self.value

    # Class method
    @classmethod
    def from_string(cls, string):
        return cls(int(string))

    # Static method
    @staticmethod
    def is_even(num):
        return num % 2 == 0

# Using instance method
calc = Calculator(10)
print(calc.add(5))  # Output: 15

# Using class method
calc2 = Calculator.from_string("20")
print(calc2.value)  # Output: 20

# Using static method
print(Calculator.is_even(15))  # Output: False

此示例展示了如何在单个类中使用实例方法、类方法和静态方法来执行不同的任务。

使用方法的最佳实践

来源

Python 类文档

在本文中,我们通过实际示例探讨了 Python 方法,包括实例方法、类方法和静态方法。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Python 教程