大锤python日记(对类中实例方法,类方法,静态方法的比较)

154 阅读4分钟
Python类中有三种方法类型:实例方法、类方法和静态方法。
  1. 实例方法

实例方法是指需要实例化类才能调用的方法。这些方法可以访问和修改对象的属性,因为它们在定义时会自动传入一个self参数,表示当前实例本身。

下面是一段示例代码:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def say_hello(self):
        """
        实例方法:向控制台打印问候语
        """
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

在上面的示例中,我们定义了一个名为Person的类,并在其中定义了一个实例方法say_hello。这个方法输出一个包含对象名和年龄的问候语。

现在可以通过实例化类并调用该方法来使用它:

person = Person("Alice", 25)
person.say_hello()  # 输出:Hello, my name is Alice and I am 25 years old.
  1. 类方法

类方法是指不需要实例化类就可以调用的方法。这些方法可以访问类变量和其他类方法,因为它们在定义时会自动传入一个cls参数,表示当前类本身。

下面是一段示例代码:

class Car:
    num_wheels = 4
    
    @classmethod
    def get_num_wheels(cls):
        """
        类方法:返回车辆的轮子数
        """
        return cls.num_wheels

在上面的示例中,我们定义了一个名为Car的类,并在其中定义了一个类方法get_num_wheels。这个方法返回车辆的轮子数,因为轮子数是一个类变量。

现在可以直接通过类名调用该方法:

num_wheels = Car.get_num_wheels()
print(num_wheels)  # 输出:4
  1. 静态方法

静态方法是指不依赖于对象状态的方法,也不依赖于类状态的方法。这些方法与类和对象没有关系,因此不需要传入任何特定的参数。

下面是一段示例代码:

class MathUtils:
    @staticmethod
    def add(x, y):
        """
        静态方法:对两个数字进行加法操作
        :param x: 第一个数字
        :param y: 第二个数字
        :return: 两个数字之和
        """
        return x + y

在上面的示例中,我们定义了一个名为MathUtils的类,并在其中定义了一个静态方法add。这个方法接受两个数字作为参数,并返回它们的总和。

现在可以直接通过类名调用该静态方法:

result = MathUtils.add(2, 3)
print(result)  # 输出:5
一个基于“动物”(Animal)类的案例,它包含三种方法类型
class Animal:
    """
    动物基类
    """

    def __init__(self, name):
        """
        初始化函数:创建一个新动物实例
        :param name: 动物名称
        """
        self.name = name

    def speak(self):
        """
        实例方法:让动物说话
        """
        pass

    @classmethod
    def from_dict(cls, animal_dict):
        """
        类方法:通过给定字典创建一个新动物实例
        :param animal_dict: 字典,包含动物名称和其他属性
        :return: 新动物实例
        """
        return cls(animal_dict['name'])

    @staticmethod
    def is_mammal(species):
        """
        静态方法:检查是否为哺乳动物
        :param species: 动物物种
        :return: 如果species是哺乳动物,则返回True;否则返回False。
        """
        mammals = ['dog', 'cat', 'human']
        return species in mammals


class Dog(Animal):
    """
    狗
    """

    def speak(self):
        """
        实例方法:让狗叫
        """
        print("Woof!")


class Cat(Animal):
    """
    猫
    """

    def speak(self):
        """
        实例方法:让猫叫
        """
        print("Meow!")


class Human(Animal):
    """
    人类
    """

    def speak(self):
        """
        实例方法:让人说话
        """
        print("Hello!")


class Elephant(Animal):
    """
    大象
    """

    def speak(self):
        """
        实例方法:让大象叫
        """
        print("Trumpet!")


class BlueWhale(Animal):
    """
    蓝鲸
    """

    def speak(self):
        """
        实例方法:让蓝鲸叫
        """
        print("Sing!")


class Chimpanzee(Animal):
    """
    黑猩猩
    """

    def speak(self):
        """
        实例方法:让黑猩猩叫
        """
        print("Scream!")

在上面的示例中,我们定义了一个名为Animal的基类,以及多个派生类DogCatHumanElephantBlueWhaleChimpanzee。每个类都包含了三种方法类型:

  1. 实例方法speak,用于让动物发出声音。

  2. 类方法from_dict,用于通过给定的字典创建一个新的动物实例。

  3. 静态方法is_mammal,用于检查给定的动物物种是否为哺乳动物。

现在我们可以使用这些类来创建不同的动物对象,并使用它们的方法:

# 创建狗、猫和人类对象并让它们叫或说话
dog = Dog("Rex")
cat = Cat("Fluffy")
human = Human("Alice")

dog.speak()  # 输出:Woof!
cat.speak()  # 输出:Meow!
human.speak()  # 输出:Hello!

# 使用类方法从字典创建一个新动物实例
animal_dict = {'name': 'Dumbo', 'species': 'elephant'}
elephant = Animal.from_dict(animal_dict)
print(elephant.name)  # 输出:Dumbo

# 使用静态方法检查物种是否为哺乳动物
is_mammal1 = Animal.is_mammal('dog')
is_mammal2 = Animal.is_mammal('snake')

print(is_mammal1)  # 输出:True
print(is_mammal2)  # 输出:False

以上代码演示了如何使用继承和不同的方法类型创建和使用多个动物对象。