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)
您可能只需要一个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类中.