是否可以向后传递对象参数?

时间:2015-08-03 19:11:16

标签: python

我有两个对象类:class Hero(object):class Alien(object),每个对象类都包含一个name参数,其中包含对象实例的名称。在每个类中,我都有一个名为def die(self):的类方法,它定义了Hero被击中或未被击中时会发生什么。虽然我能够在自身内部引用对象,但我在执行向后操作时遇到了麻烦,后者正在引用引用该方法的对象。对不起,如果这令人困惑,这就是我的意思:

#this die and blast function is contained in both classes
def die(self):    
    #(pseudocode) if hit:
        print (self.name, " is hit!")
    #(pseudocode) elif not hit:
        print (enemy.name, " misses!") #<-- currently doesn't work because enemy is not defined in the die function
def blast(self, enemy):
    print(self.name," blasts ", enemy.name, "\n")
    enemy.die()

def main():
    heroObject = Hero()
    alienObject = Alien()
    heroObject.blast(alienObject)

这是我的问题:我知道当我调用blast()时,我使用对象的名称作为参数。但是在blast()die()函数内部,如何调用最初调用它的对象的名称?行print (enemy.name, " misses!")目前无效,因为enemy函数中未定义die。理想情况下,敌人的名字会出现在print声明中。

1 个答案:

答案 0 :(得分:2)

如果您需要从die()访问其他对象,请将其明确传递给该函数:

def die(self, enemy):    
    #(pseudocode) if hit:
        print (self.name, " is hit!")
    #(pseudocode) elif not hit:
        print (enemy.name, " misses!")

def blast(self, enemy):
    print(self.name," blasts ", enemy.name, "\n")
    enemy.die(self)

def main():
    heroObject = Hero()
    alienObject = Alien()
    heroObject.blast(alienObject)

当我们从self进入enemy时,请注意blast()die()的含义是如何反转的。

如果可能的话,有一个观察结果是,在die()内有一个“if misses”逻辑似乎有点奇怪。似乎暗示即使敌人没有死亡而且即将死亡,也可以召唤die()。我认为逻辑属于函数之外。