繁体   English   中英

如何使用方法更改python中的实例变量?

[英]How to change an instance variable in python using a method?

我对 python 很陌生,目前正在练习 OOP。 我面临的问题之一是如何使用方法更改 python 中的实例变量。 我的代码:

class Monster:
   def __init__ (self, name, health):
      self.name = name
      self.health = health
   @classmethod
   def change_name (self, given_name):
      self.name = given_name
mon = Monster("Drake", 100)
print(mon.name)
mon.change_name("Derrick")
print(mon.name)

输出:

#Expected:
Drake 
Derrick
#Actual:
Drake
Drake

有人可以告诉我问题是什么以及我如何解决它?

这是因为change_name方法被声明为classmethod

这意味着它的self参数不是对象(类的实例)而是类,实际上您应该将其重命名为cls以使其清楚。

通过类分配 tbe 变量会在类的命名空间中创建它,而不是在对象的命名空间中。

但是当通过对象查找时,python 在对象的命名空间中查找它,如果找不到,它会在类中查找它(如果还没有找到,则在超类中查找)

由于您似乎不需要它,因为 name 属性属于每个怪物实例,因此解决方案是通过删除@classmethod装饰器使该方法成为一个普通实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM