当前位置: 首页 > 面试题库 >

具有用户输入的类的示例

笪建章
2023-03-14
问题内容

已关闭 。这个问题需要细节或说明。它当前不接受答案。

想改善这个问题吗? 添加详细信息并通过编辑此帖子来澄清问题。

5年前关闭。

改善这个问题

在(尝试)学习类时,我在网上看到的大多数示例中,类的实例都是由程序员定义的。有什么方法可以创建类的实例,其中由用户定义存储该类的变量?

这是另一个SO问题中的对象的示例:

class StackOverflowUser:
    def __init__(self, name, userid, rep): 
        self.name = name
        self.userid = userid
        self.rep = rep

dave = StackOverflowUser("Dave Webb",3171,500)

如何进行更改,以便用户可以基于类创建实例?


问题答案:

大致有两种方式可以做到这一点:

  1. 将输入完全放在类之外,然后__init__像往常一样将其传递给:
    user = StackOverflowUser(
    raw_input('Name: '),
    int(raw_input('User ID: ')), 
    int(raw_input('Reputation: ')),
    

    )

可以说这是一个更简单的概念;要么

  1. 在类中进行输入,例如使用类方法:
    class StackOverflowUser:
    
    def __init__(self, name, userid, rep): 
        self.name = name
        self.userid = userid
        self.rep = rep
    
    @classmethod
    def from_input(cls):
        return cls(
            raw_input('Name: '),
            int(raw_input('User ID: ')), 
            int(raw_input('Reputation: ')),
        )
    

然后这样称呼:

    user = StackOverflowUser.from_input()

我更喜欢后者,因为它在所属的类中保留了必要的输入逻辑,并且请注意,它们当前都没有对输入的任何验证(请参见例如,要求用户提供输入,直到他们给出有效的响应为止)。

如果您想拥有多个用户,则可以使用唯一键将它们保存在字典中(例如,他们的userid-请注意,Stack Overflow允许多个用户使用相同的名称,因此
不会 是唯一的):

users = {}
for _ in range(10):  # create 10 users
    user = StackOverflowUser.from_input()  # from user input
    users[user.userid] = user  # and store them in the dictionary

然后,每个用户都可以通过访问users[id_of_user]。您可以添加检查以拒绝具有重复ID的用户,如下所示:

if user.userid in users:
    raise ValueError('duplicate ID')


 类似资料: