python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > 实例方法、类方法和静态方法区别

Python入门之实例方法、类方法和静态方法的区别讲解

作者:Le0v1n

这篇文章主要介绍了Python入门之实例方法、类方法和静态方法的区别讲解,实例方法是在创建了类的实例之后才能被调用的方法,类方法是在不需要创建类的实例的情况下就可以调用的方法,最后,静态方法是与类和类的实例都没有绑定关系的方法,需要的朋友可以参考下

1. 例子

class Dog:
    # 定义类变量(类属性)
    dogbook = {"黄色": 30, "黑色": 20, "白色": 0}
    def __init__(self, name, color, weight) -> None:
        self.name = name
        self.color = color
        self.weight = weight
        if self.color in self.dogbook:
            self.dogbook[self.color] += 1
        else:
            self.dogbook[self.color] = 1
    # 定义实例方法(定义时,必须把self作为第一个参数),该方法可以访问实例变量(属性)。调用时必须通过实例名来调用,不能通过类名来调用
    def bark(self):
        print(f"{self.name} is barking!")
    # 定义类方法(定义时,必须把cls作为第一个参数)。该方法可以访问类变量(属性),可以通过实例名来调用,也可以通过类名来调用
    @classmethod
    def dog_num(cls):
        num = 0
        for val in cls.dogbook.values():
            num += val
        return num
    """
        定义静态方法(定义式,不需要把self和cls作为第一个参数)。静态方法就是普通的函数,它对类和实例都一无所知。
        不能访问类变量,也不能访问实例变量。可以通过实例名来调用,也可以通过类名来调用
        静态方法写在类外面也是可以的,写在类里面只是因为这个函数和类有一定的关系,逻辑上更加易懂!
    """
    @staticmethod
    def total_weights(形参):
        total = 0
        for val in 形参:
            total += val.weight
        return total
if __name__ == "__main__":
    print(f"共有 {Dog.dog_num()} 条狗")
    dog_1 = Dog(name="大黄", color="黄色", weight=10)
    dog_1.bark()
    print(f"共有 {Dog.dog_num()} 条狗")
    try:
        Dog.bark()
    except:
        print("不能通过类名调用实例方法!")
    dog_2 = Dog(name="旺财", color="灰色", weight=8)
    dog_2.bark()
    print(f"共有 {Dog.dog_num()} 条狗")
    print(f"狗的重量为: {Dog.total_weights(形参=[dog_1, dog_2])}")

运行结果:

共有 50 条狗
大黄 is barking!
共有 51 条狗
不能通过类名调用实例方法!
旺财 is barking!
共有 52 条狗
狗的重量为: 18

2. 说明

名称装饰器定义是否可以访问实例变量实例名调用类名调用
实例方法必须把self作为第一个参数×
类方法@classmethod必须把cls作为第一个参数
静态方法@staticmethod等价于普通函数×

3. 注意事项

4. 总结

总的来说

要理解这三种方法的区别和何时使用它们,是Python类编程的基本技巧之一。

到此这篇关于Python入门之实例方法、类方法和静态方法的区别讲解的文章就介绍到这了,更多相关实例方法、类方法和静态方法区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文