Python新手类设计问题

jam*_*ieb 6 python oop iterator

我正在试图找出设计几个类的最佳方法.我对Python(以及一般的OOP)很陌生,只是想确保我做得对.我有两个类:"用户"和"用户".

class User(object):
   def __init__(self):
       pass

class Users(object):
   def __init__(self):
       self.users = []

   def add(self, user_id, email):
       u = User()
       u.user_id = user_id
       u.email = email
       self.users.append(u)

users = Users()
users.add(user_id = 1, email = 'bob@example.com')
Run Code Online (Sandbox Code Playgroud)

如果我想要检索我的用户,我使用:

for u in users.users:
    print u.email
Run Code Online (Sandbox Code Playgroud)

"users.users"似乎有点多余.我这样做了吗?

Chr*_*utz 17

我会说不是真的.你的Users类看起来只是一个用户列表,所以我只想把它作为一个列表而不是整个类.这就是我要做的事情:

class User(object):
    def __init__(self, user_id=None, email=None):
        self.user_id, self.email = user_id, email

users = []
users.append(User(user_id = 1, email = 'bob@example.com'))

for u in users:
    print u.email
Run Code Online (Sandbox Code Playgroud)

如果Users由于其他原因想要成为自己的类,可以让它继承list,或者(如果没有)你可以将它们添加到定义中:

class Users(object):
    # rest of code
    def __iter__(self):
        return iter(self.users)
Run Code Online (Sandbox Code Playgroud)

这样,您可以简单地说:

users = Users()
...
for u in users:
    print u.email
Run Code Online (Sandbox Code Playgroud)


rec*_*ive 11

把它放在你的Users:

def __iter__(self):
    return iter(self.users)
Run Code Online (Sandbox Code Playgroud)

现在你可以:

for u in users:
    print u.email
Run Code Online (Sandbox Code Playgroud)

文件


cqu*_*len 6

您可能只需要一个User对象列表而不是一个包含多个用户的类.

class User(object):
   def __init__(self, user_id, email):
       self.user_id = user_id
       self.email = email

users = []
users.append(User(user_id = 1, email = 'bob@example.com'))
Run Code Online (Sandbox Code Playgroud)

User的所有成员属性应驻留在User类中,而不是Users类中.