这是我编写的代码,当我set_grade我将@ 99设置为您看到的等级时,我希望@classmethod更改所有类的等级,并且当我打印实例std_1的等级时它将打印我设置的原始等级(100 ),而不是我想要的(99)并执行的操作:
student.set_grade(99)
给我相同的结果
class student:
num_of_std = 0
def __init__(self , first , last , grade):
self.first = first
self.last = last
self.grade = grade
student.num_of_std += 1
@classmethod
def set_grade(cls , change_grade):
cls.grade = change_grade
def full_name(self):
return '{} {}: {}'.format(self.first , self.last , self.grade)
std_1 = student('Jone' , 'Jones' , 100)
std_1.set_grade(99)
print(std_1.grade)
答案 0 :(得分:0)
首先,此代码未按我的要求运行。 student.num_of_std += 1
出现错误,因为此时尚未定义学生。
因此,我对您的代码做了如下修改,希望可以保留您的意图:
class student:
num_of_std = 0
def __init__(self , first , last , grade):
self.first = first
self.last = last
self.grade = grade
student.num_of_std += 1
@classmethod
def set_grade(cls , change_grade):
cls.grade = change_grade
def full_name(self):
return '{} {}: {}'.format(self.first , self.last , self.grade)
std_1 = student('Jone' , 'Jones' , 100)
std_1.set_grade(99)
print("std_1.grade: " + str(std_1.grade))
print("student.grade: " + str(student.grade))
我明白了
std_1.grade: 100
student.grade: 99
作为我的输出。
如您所见,您定义的类方法更改了 class 本身的grade
属性, 不是 在调用它的实例上。当您访问std_1.grade
时,将获得 instance 属性,该属性未更改,因此仍然为100
。
如果要更改调用set_grade
的实例的等级,请删除@classmethod
批注。
我不太确定您所期望的行为,如果这不能回答您的问题,请给我评论,然后我可以更新我的回答以进行解释。