Как использовать переменную класса в функции? - PullRequest
1 голос
/ 21 марта 2020

Прежде всего, я прошу прощения, если я написал какое-то слово неправильно - мой второй язык - английский sh.

Но в любом случае я работаю над текстовой RPG уже неделю и только начал боевая система, и у меня есть вся статистика игроков и врагов в пунктах.

Это только часть моего кода, но этого достаточно. Итак, я сделал функцию, которая повышает уровень моего персонажа.

class player:
    def __init__(self):
        self.name='Hero'
        self.lvl=1
        self.xp=0
        self.lvl_next=25
        self.str=1
        self.dex=1
        self.int=1

    def pl_level(self):
        Nstr=0
        Ndex=0
        Nint=0

        while player.xp>=player.lvl_next:
            player.lvl+=1
            player.xp-=player.lvl_next
            player.lvl_next=round(player.lvl_next*1.5)
            Nstr+=1
            Ndex+=1
            Nint+=1

        print('Level:', player.lvl)
        print('STR {} +{} DEX {} +{} INT {} +{}'.format(player.str, Nstr, player.dex, Ndex, player.int, Nint))
        player.str+=Nstr
        player.dex+=Ndex
        player.int+=Nint
        print('Exp: '+str(player.xp))
        print('To the next level: {}%'.format(int((player.xp/player.lvl_next)*100)))
        print('Next:', player.lvl_next)

Но я не знаю, почему он просто не работает. Я попытался упростить свой код, потому что, может быть, так я найду проблему. Но он просто продолжает выдавать мне эту ошибку.

Traceback (most recent call last):
File "F:\2XK_\Coding\Python\Python_Battle\Ulfberht\leveling_system.py", line 99, in <module>
pl_level()
File "F:\2XK_\Coding\Python\Python_Battle\Ulfberht\leveling_system.py", line 11, in pl_level
while player.xp>=player.lvl_next:
AttributeError: type object 'player' has no attribute 'xp'

Даже если вы видите, что в init есть self.xp.

Так как я могу это исправить

1 Ответ

0 голосов
/ 21 марта 2020

Используйте это как self.px внутри других методов, иначе, если вы хотите использовать подобное, только сделайте его player().px вместо player.px. Поскольку ваш класс должен быть сначала инициализирован перед использованием любой из его переменных или методов ,

Лучше получить доступ к переменным класса в том же классе, используя self в качестве хорошей практики.

...