如何在不创建新对象的情况下更改对象的参数?

时间:2017-09-07 14:51:53

标签: python

while jogador1_hp > 30:
    enemy1_atk = random.randrange(1, 250)
    enemy1 = Enemy1(enemy1_atk)
    enemy1_atkk = enemy1.getAttk()
    jogador1_hp = jogador1_hp - enemy1_atkk

    if jogador1_hp <= 30:
        jogador1_hp = 30

    print("You got hit and you lost ", enemy1_atkk, " hp. Your HP its now", jogador1_hp)

    if jogador1_hp > 30:
        continue

    print("Gods protected you by teleporting you to the nearest INN")
    break

在这个练习中,我想创造一个“敌人”,我希望每次攻击时他的攻击都是随机的。如果我在while循环中创建敌对象,每次循环时它会创建一个新对象,或者它再次创建同一个对象?

有没有办法在循环外创建对象,并且每次循环时仍能够改变他的“攻击”?

编辑:这是我的敌人类

class Enemy1:
    def __init__(self, atkp):
        self.atkp = atkp

    def getAttk(self):
        return self.atkp

EDIT2:感谢您的回复,我设法解决了这个问题。它现在就像这样:

class Enemy1:
    def __init__(self, atkp):
        self.atkp = atkp




jogador1 = Player1(300)
jogador1_hp = jogador1.getBHP()
enemy1_atk = random.randrange(1, 250)
nemy1 = Enemy1(enemy1_atk)

while jogador1_hp > 30:
    enemy1_atk = random.randrange(1, 250)
    jogador1_hp = jogador1_hp - enemy1_atk

2 个答案:

答案 0 :(得分:3)

您每次都在创建一个新对象。如果要在每次从同一对象获取随机值时,只需让对象创建随机值。

import { computed } from 'mobx'
import { observer } from 'mobx-react'
import { createViewModel } from 'mobx-utils'

@observer
class Child extends React.Component {
    owner = createViewModel(this.props.user);

    render () {
      return <div>{this.owner.name}</div>
    }
}

然后在循环外创建对象。

答案 1 :(得分:2)

是的,如果你在循环中创建敌人类的实例,你将在每次循环迭代时获得一个新实例。

enemy1 = Enemy1(enemy1_atk)
while jogador1_hp > 30:
    # the rest of your code

会在你的循环运行之前创建敌人,然后只要你在循环中引用enemy1,它就会是同一个实例。

Python没有私有类属性(变量)。因此,您不需要getAttk类中的Enemy方法。您可以直接访问atkp属性。如果您想要访问enemy1的{​​{1}}属性,那么您需要做的就是

atkp

由于很容易能够访问敌人的攻击,因此可能也不需要enemy1.atkp = x 变量。