为什么当我在 init 方法中要求用户输入时,我的实例变量显示为未定义

Why is my instance variable coming up as undefined when I ask for user input in my init method

提问人:somehelplease 提问时间:8/1/2023 最后编辑:Barmarsomehelplease 更新时间:8/1/2023 访问量:45

问:

当我要求用户输入我的类时,变量显示为未定义。 当我在我的方法中运行它时__init__

import random
import math
players=[]
player_names=[]
cards=[2,3,4,5,6,7,8,9,'kings','queens','aces']
class  Player:
    def __init__(self,name,money,cardl,bust,bet=None):
        
        self.name=name
        self.name=input('enter in your name')
        while cls.name  in player_names:
                print('username taken')
                cls.name=input('Enter in name')
        self.money=money
        money=0
        self.bet=bet
        bet=float(input("What is your bet"))
        self.busted=busted
        self.cardl=[]
        self.cardl.append(random.sample(cards,1))
        self.cardl.append(random.sample(cards,1))
        self.busted=False
player=Player(name,money,cardl,bust,bet)
players.append(player)
print('Welcome',player.name)
 
class dealer(Player):
        pass

我希望允许用户开始向变量中输入值,但我得到了

player=Player(name,money,cardl,bust,bet)
NameError: name 'name' is not defined

因此,我决定通过以下方式运行该方法:__init__

__init__()

NameError:未定义名称“__init__”

Python OOP 方法 User-Input

评论

0赞 Barmar 8/1/2023
您需要先为所有变量提供值,然后才能在参数列表中使用它们。喜欢name = input("What is your name? ")
0赞 Barmar 8/1/2023
由于该方法要求用户提供名称,因此无需将其包含在参数列表中。
0赞 Barmar 8/1/2023
我认为您的方法实际上不需要任何参数。它要求用户输入名称,并且所有其他属性都设置为默认值。__init__()
0赞 Barmar 8/1/2023
这非常令人困惑,因为您这样做了(请注意,该参数实际上是命名的),然后几行后您这样做了。那么,如果你要把它设置为 ,你为什么首先把它设置为?self.busted = bustedbustself.busted = FalseFalsebusted

答:

0赞 Merithor 8/1/2023 #1

调用类构造函数时,变量尚不存在,因此无法创建对象。您可以将它们初始化为空,但随后应立即正确初始化它们。玩家名称的检查可以通过以下方式实现:

import gc

player_name_list = []

# get all the current player names
for obj in gc.get_objects():
    if isinstance(obj, Player):
        player_name_list.append(obj.name)

name=input('enter in your name')
while name in player_name_list:
    print('username taken')
    name=input('Enter in name')

评论

0赞 somehelplease 8/2/2023
谢谢你,这有帮助。另外,我有一个问题,栈溢出的人在业余时间随机回答问题,因为他们很无聊,或者你对自己说我今天至少需要帮助一个人?
0赞 Merithor 8/3/2023
@somehelplease很高兴能帮上忙。如果您将我的评论标记为正确答案,我将不胜感激!就我而言,我通常在编译代码或运行查询时滚动浏览 stackoverflow ;)