【问题标题】:Creating class instance based on user input根据用户输入创建类实例
【发布时间】:2020-07-28 07:23:32
【问题描述】:

假设我有这门课

class employee(object)
    def __init__(self,name):
        return self.name
    def something(self):
        pass
    ...

导致

if __name__== "__main__":
    name = input("what is your name ")
    user1 = employee(name)
    user1.something()
    ...

我希望 user1 实例是用户输入的名称,以便我可以拥有唯一的实例。如何根据主要部分中的用户输入添加实例?

所以如果我运行程序并输入“tim”,我想要的结果是:

tim.name = "tim"
....

更新

上面好像不清楚,我用我的实际代码来解释一下吧:

所以我有这个 Spotify API:

class Spotify(object):
def __init__(self,user):
    self.client_id = ''
    self.client_secret = ''


def client_credentials(self):
     pass
def get_header_token(self):
     pass
...

最后,

if __name__== "__main__":
        
        user = input("Enter username ")
        user = Spotify(user)
        user.request_author()
        ...

我正在尝试将用户变量获取到用户提供的输入,例如如果用户输入“tim123”,则用户变量也将是 tim123。

所以我可以表演:

tim123.name

认为我的大脑一片空白,应该有一个简单的解决方案。我确信这是非常不切实际的,但我不知道如果需要的话我会怎么做。

【问题讨论】:

  • 您希望用于访问类的变量名由用户输入确定吗?
  • 是的。稍后我可能会以某种方式添加一个唯一的 id,但我只是好奇如何通过用户输入创建变量名,如果可以的话?
  • This 可能会有所帮助,尽管它不是很有用。更好的解决方案可能是使用 while 循环来获取输入,并将这些输入用于您的姓名。

标签: python class


【解决方案1】:

改变

return self.name

self.name = name

如果 name== "ma​​in":

variable_name = raw_input("Enter variable name:") # User.     
enters "tim123"

name = input("Enter Name")

globals()[variable_name] = employee(name)

tim123.name

【讨论】:

  • 但是我将不得不在主要部分中手动编码变量名称 (user1)。如果有意义的话,希望通过用户的输入设置 user1 变量。
  • 抱歉,我在移动设备上无法正确输入。
【解决方案2】:

根据您的评论,听起来您正在寻找exec()eval()Link. 我的解决方案是:

class employee(object):
    def __init__(self,name):
        self.name = name
name = input("what is your name ")

exec(f"{name} = employee('{name}')")

(然后您将访问 joe.name,如果用户输入 joe,或者 bob.name,如果用户输入 bob 等)。 或者,您可以使用 locals()globals()

希望这有帮助!

【讨论】:

  • 谢谢,我去看看!我更新了我的问题,但我认为这就是我要找的!
猜你喜欢
  • 2022-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多