已关闭 。这个问题需要细节或说明。它当前不接受答案。
想改善这个问题吗? 添加详细信息并通过编辑此帖子来澄清问题。
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)
如何进行更改,以便用户可以基于类创建实例?
大致有两种方式可以做到这一点:
__init__
像往常一样将其传递给:user = StackOverflowUser(
raw_input('Name: '),
int(raw_input('User ID: ')),
int(raw_input('Reputation: ')),
)
可以说这是一个更简单的概念;要么
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')