classmethod的应用
class Stuent(object):
stu_num = 0
__stu_num = 0
name = 333
def __init__(self,name):
self.name = name
# self.stu_num += 1 # 这就相当于对实例进行了赋值
Stuent.stu_num += 1 # 这是对类的变量进行赋值 ------- 访问公共属性用类名
# self.add_num()
self.add_num(self) # 这样调用add_num() 方法,同样可以作弊
print("生成了一个新学生",name,self.stu_num)
# @classmethod
# def add_num(cls):
# print("cls = ",cls)
# cls.__stu_num += 1
# print("生成了一个新学生", cls.__stu_num)
@classmethod
def add_num(cls, obj):
# 类里面如果有name又可以绕过去
if obj.name:
cls.__stu_num += 1
print("生成了一个新学生", cls.__stu_num,obj.name)
s1 = Stuent("Mjj")
s2 = Stuent("jack")
s3 = Stuent("Alex")
# 这样可以作弊
# Stuent.stu_num += 1
# print("stu_num = ",Stuent.stu_num)
# Stuent.add_num()
# 类里面如果有name又可以绕过去
Stuent.add_num(Stuent)
运行结果:
生成了一个新学生 1 Mjj
生成了一个新学生 Mjj 1
生成了一个新学生 2 jack
生成了一个新学生 jack 2
生成了一个新学生 3 Alex
生成了一个新学生 Alex 3
生成了一个新学生 4 333