名称错误:未定义名称“stats”

2024-10-02 12:22:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我在尝试python的类,但是我遇到了一个名称错误,我不知道如何修复。当不在一个类里的时候,它工作得很好,但是现在它不工作了,我想这是一个明显的问题,或者只是整个事情都错了,我现在看起来很愚蠢,哈哈,其他变量都是我没有时间去做的事情,所以忽略它们。(是的,统计数据是直接从辐射中剥离出来的)

import time, random
class User():
        def players():
            players = 0
        def stats(self):
            perks = 20
            print ("you have 20 perk points to spend")
            print(""" you have several choices of what to spend
                        them in:
                        STRENGTH - what it says on the tin
                        PERCEPTION - awareness
                        ENDURANCE - how long you can endure something
                        CHARISMA - yet again what it says on the tin
                        INTELLIGENCE - how smart you are
                        AGILITY - how much of a slippery bugger you are
                        LUCK - how lucky you are""")
            strength = int(input("What level is your strength?"))
            perks = perks - strength
            perception = int(input("What level is your perception?"))
            perks = perks - perception
            endurance = int(input("What level is your endurance?"))
            perks = perks - endurance
            charisma = int(input("What level is your charisma?"))
            perks = perks - charisma
            intelligence = int(input("What level is your intelligence?"))
            perks = perks - intelligence
            agility = int(input("What level is your agility?"))
            perks = perks - agility
            luck = int(input("What level is your luck?"))
            perks = perks - luck

            if perks >= 0:
                print ("this works")
            elif perks <=-1:
                print("this also works")
        def __init__(self,username,stats):
            self.username = username
            self.stats = stats

            players +=1
story = "on"
while story ==  "on":
    print ("Start of story")    
    stats()


 Welcome to my story
    Traceback (most recent call last):
      File "C:/Users/----/----/python/----.py", line 45, in <module>
        stats()
    NameError: name 'stats' is not defined
    >>> 

Tags: selfyouinputyourisondefstats
2条回答

您的问题是您有attributestats和方法stats,您可以将您的stats属性重命名为_stats,而且还需要从User类中创建一个对象

class User():

    def __init__(self,username,stats):
        self.username = username
        self._stats = stats
        ...

    def stats(self):
        ...


user = User('test', 1)
story = "on"
while story ==  "on":
    print ("Start of story")    
    user.stats() # method
    user._stats # attribute

stats()是您的类User的一个方法。这意味着stats()存在于User的{a1}内,但超出了范围,它没有被定义。在

还有另一个问题:您的__init__接受一个同名的参数(stats),然后将stats设置为self的属性。这意味着您可以使用传递给__init__调用的任何内容覆盖您的方法stats()(当您设置self.stats = stats时)。您应该将此属性重命名为self._stats = stats。在

而且在全局范围内,您从未instantiated您的类User。所以你可以这样做:

user = User("Jeremy", "whatever your stats are")
story = "on"
while story ==  "on":
    print ("Start of story")    
    user.stats()

这将解决错误。不过,我不确定代码是否能达到您期望的效果。在stats()中定义了很多变量,比如strength等等。也许你想把它们定义为self的属性,所以self.strength = ...。在

然后可以通过user.strength等在全局范围内访问它们

相关问题 更多 >

    热门问题