[英]print object/instance name in python
我想知道是否有辦法在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
這可能會導致分配綁定,引用等一大堆問題 ,最重要的是不允許您按用戶或程序選擇命名對象。
而是在您的類中添加一個名為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.
你必須先給他們起名字。 例如
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()
我在這里發布了一個完整的解決方案
https://stackoverflow.com/a/49331683/7386061
它沒有參數。 例如,您可以這樣做:
class badguy(RememberInstanceCreationInfo):
def __init__(self):
super().__init__()
self.hp = 4
def attack(self):
print("hit")
self.hp -= 1
def still_alive(self):
if self.hp <=0:
print("enemy destroyed")
else :
print (self.creation_name + " has " + str(self.hp) + " hp left")
enemy1 = badguy()
enemy2 = badguy()
enemy1.attack()
enemy1.attack()
enemy1.still_alive()
enemy2.still_alive()
out: hit
out: hit
out: enemy1 has 2 hp left
out: enemy2 has 4 hp left
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.