9-11 静态方法
看看思维导图
![](https://img.haomeiwen.com/i11154655/a18bfa5bc857c9ee.png)
class Student():
sum = 0 #一个班级学生的总数
name = '小鱼'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
self.__class__ .sum += 1 #这是在构造函数里的操作
print('当前班级学生总数为:' + str(self.__class__.sum))
# print(self.__class__.sum += 1) #每次创建一个对象,说明班级多了一个学生
def do_homework(self):
print('homework')
# 定义一个类方法的格式如下,@classmethod叫做装饰器
@classmethod
def plus_sum(cls):#实例方法用self,类方法用cls
cls.sum += 1 #模仿实例方法的书写模式
print(cls.sum)
# 静态方法的格式
# 静态方法和类方法和实例方法相比较不需要传递参数
@staticmethod
def add(x,y):
print(Student.sum)#静态方法的内部也是可以访问类变量的 如图2
print('this is a static method')
# 来看看静态方法的调用方式!!!
student1 = Student('石敢当',18)
student1.add(1,2)#静态方法被对象调用
Student.add(1,2)#静态方法也可以被类调用
# 如图1
# 思考一个问题,类方法和静态方法可不可以访问实例变量?
class Student():
sum = 0 #一个班级学生的总数
name = '小鱼'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
self.__class__ .sum += 1 #这是在构造函数里的操作
#print('当前班级学生总数为:' + str(self.__class__.sum))
# print(self.__class__.sum += 1) #每次创建一个对象,说明班级多了一个学生
def do_homework(self):
print('homework')
# 定义一个类方法的格式如下,@classmethod叫做装饰器
@classmethod
def plus_sum(cls):#实例方法用self,类方法用cls
cls.sum += 1 #模仿实例方法的书写模式
#print(cls.sum)
print(self.name)
# 静态方法的格式
# 静态方法和类方法和实例方法相比较不需要传递参数
@staticmethod
def add(x,y):
#print(Student.sum)#静态方法的内部也是可以访问类变量的 如图2
print(self.name)
#print('this is a static method')
# 来看看静态方法的调用方式!!!
student1 = Student('石敢当',18)
student1.add(1,2)#静态方法被对象调用
Student.add(1,2)#静态方法也可以被类调用
student1.plus_sum()#对象访问类方法
Student.plus_sum()#类访问类方法
# 打印结果如图3所示,造成图3的原因如下
# 如果尝试在静态方法和类方法里引用实例变量会直接报错的
# 静态方法和类方法(类方法好用点),静态方法慎重使用
![](https://img.haomeiwen.com/i11154655/75419e080fce5d48.jpg)
![](https://img.haomeiwen.com/i11154655/16424d029b5be0d8.jpg)
![](https://img.haomeiwen.com/i11154655/387a09699a582f4f.jpg)
网友评论