У меня проблемы с попыткой распечатать статистику игрока в функции класса. Когда я запускаю его, он не печатается.

class Player(object):
    def __init__(self, name, hp, dmg, lvl, inventory, speed):
       self.name = name
       self.hp = hp
       self.dmg = dmg
       self.lvl = lvl
       self.inventory = inventory
       self.speed = speed

    def printStats(self):
       return("Health: " + self.hp + ", Attack Damage: " + self.dmg + ", Level: " + self.lvl + ", Speed: " + self.speed)

link = Player("Link", 10, 3, 1, {}, 3)
link.printStats
0
The Batgamer 18 Дек 2015 в 23:08

4 ответа

Лучший ответ

Если вы хотите распечатать статистику, вы должны напечатать статистику.

def printStats(self):
    print("Health: " + ...)

Вам также необходимо вызвать функцию (обратите внимание на завершающие скобки):

link.printStats()

Несколько более питоническим решением было бы изменить то, что печатается при печати объекта. Вы можете сделать это, определив метод __str__. Затем просто передайте свой объект команде печати.

class Player(object):
    def __init__(self, name, hp, dmg, lvl, inventory, speed):
       self.name = name
       self.hp = hp
       self.dmg = dmg
       self.lvl = lvl
       self.inventory = inventory
       self.speed = speed

    def __str__(self):
        return "Health: %s Attack Damage: %s Level: %s Speed: %s" % (self.hp, self.dmg, self.lvl, self.speed)

link = Player("Link", 10, 3, 1, {}, 3)
print(link)
4
Bryan Oakley 18 Дек 2015 в 20:16

Вместо этого вы можете использовать __repr__(self) функцию:

class Player(object):
    def __init__(self, name, hp, dmg, lvl, inventory, speed):
        self.name = name
        self.hp = hp
        self.dmg = dmg
        self.lvl = lvl
        self.inventory = inventory
        self.speed = speed

    def __repr__(self):
         return("Health: " + self.hp + ", Attack Damage: " + self.dmg + ", Level: " + self.lvl + ", Speed: " + self.speed)


link = Player("Link", 10, 3, 1, {}, 3)
print link
0
Ali Nikneshan 18 Дек 2015 в 20:14

Когда вы запускаете программу в режиме IDLE или REPL, python автоматически печатает возвращаемое значение функции. Так что замените это:

def printStats(self):
    return("Health: " + ...)

С этим:

def printStats(self):
    print("Health: " + ...)

Вы также не смогли вызвать функцию (т.е. запустить).

link.printStats

Просто говорит: «Хорошо, найди мне функцию printStats по ссылке».

Вы не запустили его, вы просто получили его.

Попробуйте вместо этого:

link.printStats()

Кстати, соглашение Python гласит, что вы не должны использовать надписи CamelCase для функций. Вместо этого используйте name_with_underscores.

0
noɥʇʎԀʎzɐɹƆ 18 Дек 2015 в 20:25

В зависимости от того, в какой версии Python вы работаете, вам нужно сделать это

для Python 2.7

    print link.printStats()

для Python 3.x

    print(link.printStats())
0
0xtvarun 18 Дек 2015 в 20:30