更好的设计原则是不依赖对象的特定名称,如下所示:class badguy(object):
def __init__(self):
pass
b = badguy()
print b
>>> <__main__.badguy object at> # 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.