Python入门之实例方法、类方法和静态方法的区别讲解
更新时间:2023年10月08日 11:05:46 作者: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. 注意事项
- 默认创建的方法都是实例方法
- 类方法在创建时第一个参数必须是cls,不能缺省
- 静态方法不可以传入self,会报错(因为静态方法本质上就是普通的函数,传入的self会被认为是一个形参)!
4. 总结
总的来说
- 实例方法适用于需要类的每个实例共享的操作;
- 类方法用于需要在不创建类实例的情况下执行操作的情况;
- 而静态方法则适用于不需要访问类或实例的数据的情况。
要理解这三种方法的区别和何时使用它们,是Python类编程的基本技巧之一。
到此这篇关于Python入门之实例方法、类方法和静态方法的区别讲解的文章就介绍到这了,更多相关实例方法、类方法和静态方法区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论