9-10 类方法
看看下列思维导图
Python类.png
本节课重点讲述类方法
# 实例方法里操作类变量,如让学生的总数加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')
student1 = Student('石敢当',18)
student2 = Student('喜小乐',18)
student3 = Student('西门庆',18)
# 打印结果如图1所示
# 第二种方法也可以实现实例方法的类操作变量,如下
class Student():
sum = 0 #一个班级学生的总数
name = '小鱼'
age = 0
def __init__(self,name,age):
self.name = name
self.age = age
# print(self.__class__.sum += 1) #每次创建一个对象,说明班级多了一个学生
def do_homework(self):
self.__class__ .sum += 1 #在普通函数里也可以实现这样的操作
print('当前班级学生总数为:' + str(self.__class__.sum))
print('homework')
student1 = Student('石敢当',18)#到时再调用的时候,应该使用如下调用方法
student1.do_homework()
student2 = Student('喜小乐',18)
student2.do_homework()
student3 = Student('西门庆',18)
student3.do_homework()
#打印结果如图2所示
# 实例方法专门操作实例变量的,那么类方法也是专门操作类变量的,下面来看类方法操作类变量
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)
student1 = Student('石敢当',18)
Student.plus_sum() #调用的方法是在这样的
student2 = Student('喜小乐',18)
Student.plus_sum()
student3 = Student('西门庆',18)
Student.plus_sum()
# 打印结果如图3,为什么会造成图3 的原因!!!因为在构造函数里有self.__class__ .sum += 1
# 所以打印的结果就是图3这种,1,2,3,4,5,6
# 类方法里的cls,也可以全部换成this等这样的,当然也可以换成self
# 我们可以用类来调用类方法,我们可不可以用对象来调用类方法呢?答案是可以的
# 看看下面的例子
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)
student1 = Student('石敢当',18)
student1.plus_sum()#用对象来调用类方法,最好不要用!!!
1.jpg
2.jpg
3.jpg
网友评论