跟踪执行情况.
s1=stud('student1',40)
这套
> s1.name到“student1”
> s1.mark到40
> s1.message to“student1 40”
将属性值视为框.三个盒子中的每一个都有一个值.其中两个拿着弦.其中一人持有一个号码.他们将保留这些值,直到明确指定它们为止.特别是属性消息没有IDEA如何获得它的价值.它不知道它通过连接name属性和mark属性来获得它的价值.它只知道它的价值是“student1 40”.
print s1.message
这输出了student1 40(毫不奇怪)
s1.name='student2'
您更新了三个属性中的一个.但你没有更新其他人.
print s1.message
由于您从未明确更改过s1.message,因此仍会输出student1 40.
关键是s1.message的值只是一个字符串.没有看不见的计算,只要初始化它的表达式发生变化,它就会自动更新它.其他语言可能也是这样,但Python却没有.
如果您想要这种行为,请执行以下操作:
class stud():
def __init__(self,a,b):
self.name=a
self.mark=b
@property
def message():
return self.name + ' ' +str(self.mark)