print (object.method) не печатает ожидаемый вывод? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть набег на ООП в python,

Этот проект создает несколько случайно сгенерированных RPG-персонажей

Проблема, с которой я столкнулся, состоит в том, что я создаю список этих случайносгенерированные символы, и хотите распечатать там статистику.

Вот как символы генерируются случайным образом:

def generateCharacters():
    classes = ["B", "E", "W", "D", "K"]

    choice = random.choice(classes)

    if choice == "B":
        return barbarian(70, 20, 50)
    elif choice == "E":
        return elf(30, 60, 10)
    elif choice == "W":
        return wizard(50, 70, 30)
    elif choice == "D":
        return dragon(90, 40, 50)
    elif choice == "K":
        return knight(60, 10, 60)

а вот класс варваров, все остальные классы более или менееидентично:

class barbarian(character):
    def __init__(self, charPower, charSAttackPwr, charSpeed):
        # Getting the properties from the inheritted character Base Class
        character.__init__(self, "B", 100)
        self.power = charPower
        self.sAttackPwr = charSAttackPwr
        self.speed = charSpeed

    # Method for getting and returning all the stats of the character
    def getStats(self):
        # Creating a string to hold all the stats, using concatenation
        stats = "Name: %s, Type: %s, Health: %s, Power: %s, Special Attack 
        Power: %s, Speed: %s" % (self.name, self.type, self.health, 
        self.power, self.sAttackPwr, self.speed)
        # Returns stats to the the function that called
        return stats

Я создал метод getStats, который использует конкатенацию строк для создания строки, отображающей все статистические данные:

# Method for getting and returning all the stats of the character
def getStats(self):
    # Creating a string to hold all the stats, using concatenation
    stats = "Name: %s, Type: %s, Health: %s, Power: %s, Special Attack Power: %s, Speed: %s" % (self.name, self.type, self.health, self.power, self.sAttackPwr, self.speed)
    # Returns stats to the the function that called
    return stats

Когда я запускаю код, онвызывает main (), которая, в свою очередь, вызывает menu ():

def menu(gameChars):
    print("Welcome to the RPG Character Simulator")
    print("Here is your randomly generated team: ")
    for x in gameChars:
        print(x.getStats)


def main():
    gameChars = []

    for x in range(10):
        y = generateCharacters()
        gameChars.insert(x, y)

    #z = generateCharacters()
    menu(gameChars)
    #print(z.getStats)

Вывод, который я ожидал от print (x.getStats), был бы, используя примеры:

Name: bob, Type: barbarian, Health: 100, Power: 70, Special Attack Power: 20, Speed: 20

но вместо этого я получаю это:

<bound method barbarian.getStats of <__main__.barbarian object at 0x000001F56A195668>>

Чего мне не хватает с этим?и как я могу получить предполагаемый вывод?

Заранее спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

другая версия будет использовать декоратор @property:

class Barbarian(Character):
  @property
  def getStats(self):
    return 'Name: {.name}'.format(self)

, что позволит:

bob = Barbarian('bob', …)
print(bob.getStats)

работать так, как вы ожидаете

0 голосов
/ 21 ноября 2018

Заменить это:

print(x.getStats)

На это:

print(x.getStats())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...