我想知道是否有一种方法可以将 python 中的对象名称打印为字符串。例如,我希望能够说 ENEMY1 还剩 2 马力,或者 ENEMY2 还剩 4 马力。有办法做到这一点吗?\
class badguy:
def __init__(self):
self.hp = 4
def attack(self):
print("hit")
self.hp -= 1
def still_alive(self):
if self.hp <=0:
print("enemy destroyed")
else :
print (str(self.hp) + " hp left")
# creating objects
enemy1 = badguy()
enemy2 = badguy()
enemy1.attack()
enemy1.attack()
enemy1.still_alive()
enemy2.still_alive()
一个更好的设计原理就是不依赖于对象的具体名称如下所示:
class badguy(object):
def __init__(self):
pass
b = badguy()
print b
>>> <__main__.badguy object at 0x7f2089a74e50> # Not a great name huh? :D
这可以带来全部财富issues具有赋值绑定、引用,最重要的是不允许您按每个对象命名您的对象user or program choice.
相反,将一个实例变量添加到您的类中,称为self._name
(9.6 类——私有变量 https://docs.python.org/3/tutorial/classes.html#tut-private) or self.name
如果你想允许类范围之外的访问(在此示例中,您可以将其命名为任何名称)。这不仅是更多面向对象设计,但现在您可以实现类似的方法__hash__
能够创建一个hash基于名称,例如使用对象作为键(这种设计选择更好的原因还有很多!).
class badguy(object):
def __init__(self, name=None):
self.hp = 4
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, name):
self._name = name
def attack(self):
print("hit")
self.hp -= 1
def still_alive(self):
if self.hp <=0:
print("enemy destroyed")
else :
print ("{} has {} hp left.".format(self.name, self.hp))
示例输出:
b = badguy('Enemy 1')
print b.name
>>> Enemy 1
b.still_alive()
>>> Enemy 1 has 4 hp left.
b.name = 'Enemy One' # Changing our object's name.
b.still_alive()
>>> Enemy One has 4 hp left.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)