python中的打印对象/实例名称
我想知道是否有方法在python中将对象名称打印为字符串。例如,我希望能够说ENEMY1有2 hp左或ENEMY2有4 hp左。有没有办法做到这一点?\python中的打印对象/实例名称
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:
def __init__(self, name):
self.hp = 4
self.name = name
def attack(self):
print("hit")
self.hp -= 1
def still_alive(self):
if self.hp <=0:
print("enemy destroyed")
else :
print (self.name + " has " + str(self.hp) + " hp left")
# creating objects
enemy1 = badguy('ENEMY1')
enemy2 = badguy('ENEMY2')
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
这会导致问题的全部财富与分配结合,引用,最重要的是不允许你为每个用户命名你的对象或程序的选择。
,如果你想允许类的范围之外访问的实例变量,而不是添加到您的self._name
(9.6 Classes - Private Variables)类调用或self.name
(在这个例子中,你可以使用任何名字)。这不仅是更多的设计,而且现在您可以实现像__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.
很好的答案,但我的眼睛流血'set_name(..)'。你可以使用'@ property'来代替吗? – SuperSaiyan
@SuperSaiyan改变了它,我同意'@财产'是要走的路,根本没有包括在原来的答案。 – ospahiu
可以,但你会发现,它更有意义,只是对'badguy'类'name'场。反映变量名称几乎总是一个坏主意。另外,如果你有一个巨大的敌人名单? – Ares
对象没有唯一的名称。如果你做'newname = enemy1',那么这个对象的“名称”是什么? – BrenBarn
大多数物体没有名称。变量有名称,但变量和对象之间没有一一对应的关系。 – user2357112