gpt4 book ai didi

python - 在 python 中打印对象/实例名称

转载 作者:太空狗 更新时间:2023-10-29 23:54:54 30 4
gpt4 key购买 nike

我想知道是否有一种方法可以将 python 中的对象名称打印为字符串。例如,我希望能够说 ENEMY1 还剩下 2 hp,或者 ENEMY2 还剩下 4 hp。有办法吗?\

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

这会导致大量问题,包括赋值绑定(bind)、引用,最重要的是不允许您为每个用户程序命名您的对象 选择。

如果您想允许在类的范围之外访问,则向您的类添加一个名为 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.

关于python - 在 python 中打印对象/实例名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38599015/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com