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



posted @ 2022-10-23 16:00  Stary_tx  阅读(21)  评论(0编辑  收藏  举报