<p>大体上有两种方法可以做到这一点:</p>
<ol>
<li><p>将输入完全放在类之外,然后像平常一样将其传递给<code>__init__</code>:</p>
<pre><code>user = StackOverflowUser(
raw_input('Name: '),
int(raw_input('User ID: ')),
int(raw_input('Reputation: ')),
)
</code></pre>
<p>这可以说是一个更简单的概念;或者</p></li>
<li><p>接受类内的输入,例如使用类方法:</p>
<pre><code>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: ')),
)
</code></pre>
<p>那就叫它:</p>
<pre><code>user = StackOverflowUser.from_input()
</code></pre></li>
</ol>
<p>我更喜欢后者,因为它与它所属的类保持必要的输入逻辑,并且注意到这两个类当前都没有对输入进行任何验证(参见<a href="https://stackoverflow.com/q/23294658/3001761">Asking the user for input until they give a valid response</a>)。</p>
<hr/>
<p>如果你想有多个用户,你可以用一个唯一的键(例如他们的<code>userid</code>-注意堆栈溢出允许多个用户有相同的名字,这样<em>就不会是唯一的):</p>
<pre><code>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
</code></pre>
<p>然后每个用户都可以作为<code>users[id_of_user]</code>访问。您可以添加一个检查来拒绝具有重复ID的用户,如下所示:</p>
<pre><code>if user.userid in users:
raise ValueError('duplicate ID')
</code></pre>