python中类方法、静态方法和实例方法的区别(自学笔记)记住三句话(代码实例)
首先明白类是什么,通俗点说,类就是一个模板,是面向对象编程代码泛型中,将数据和对数据的操作方法(既函数)打包起来的一种模板,而对象就是模板类的一个实例。通俗点说,类就像一个盒子,将数据属性和函数打包起来扔进去,对象就像是这个盒子的名字,在进行代码编程的时候,我们就负责搭积木,将这些盒子堆在一起,程序就被抽象为一个或多个对象,通过对象之间的交互实现程序的功能,而不是一系列的指令。

(找的网图,懒得画了,大概就这个意思就行了^-^)一个个盒子就是一个个类,在整个程序中通过对象的交互实现程序的功能,面向对象编程,核心要解决的问题就是:省事(专业点就是代码可读性高,易于编程与更改)

言归正传言归正传
声明一个类的时候,类中的变量分为:类变量和实例变量
类中的方法分为:实例方法,类方法和静态方法
类方法:声明类方法标识符@classmethod 必须使用参数cls 可以访问类变量(只有类方法可以访问类变量),可以通过类名或者实例名来访问
静态方法:声明静态方法标识符@staticmethod 不能访问类变量也不能访问实例变量,可以通过类名或者实例名来访问
实例方法:声明实例方法必须使用参数self,不能访问类变量,只能通过实例名来访问
代码实例:
class dogs():
#类变量,只能由类方法访问
dogbook={'黄色':30,'黑色':20,'白色':0}
def __init__(self,name,color,weight):
self.name=name
self.color=color
self.weight=weight
#定义一个实例方法,声明实例方法必须使用参数self,不能访问类变量,只能通过实例名来访问
def bark(self):
print(f"{self.name}叫了起来")
#定义类方法,声明类方法必须使用参数cls 可以访问类变量,可以通过类名或者实例名来访问
@classmethod
def dog_num(cls):
num=0
for v in cls.dogbook.values():
num = num+v
return num
#定义静态方法,不能访问类变量也不能访问实例变量,可以通过类名或者实例名来访问
@staticmethod
def total_weight(dogs):
total = 0
for i in dogs:
total =total+i.weight
return total
#类变量只能通过类名来访问,dog_num()是类方法,在类方法中也可以访问类变量
print(f"共有{dogs.dog_num()}条狗")
#类实例化对象d1和d2
d1 =dogs('大黄','黄色',20)
#bark()是实例方法,只能通过实例名来访问,不能通过类名来访问
d1.bark()
d2=dogs('小白','白色',8)
#静态方法,不能访问实例变量也不能访问类变量,既可以通过实例名访问,也可以通过类名访问
print(f"大黄和小白一共重{dogs.total_weight([d1,d2])}斤")
print(f"大黄和小白一共重{d2.total_weight([d1,d2])}斤")
