学习python和作者没有展示打印class方法输出的部分。作者只是想演示一下在哪里可以使用Map函数。
但我正在想办法打印它返回的内容。
class User:
def __init__(self, username, password):
self.username = username
self.password = password
@classmethod
def from_dict(cls, data):
return cls(data['username'], data['password'])
users = [
{ 'username': 'rolf', 'password': '123'},
{ 'username': 'teclado', 'password': '1234'}
]
user = [User.from_dict(user) for user in users]
print(user)
或者将其打印到终端
user = map(User.from_dict, users)
print(user)
它打印一份参考资料。我想看看实际的数据。
[<__main__.User object at 0x7f54b5e02b80>, <__main__.User object at 0x7f54b5e02d00>]
<map object at 0x7f54b5e02d60>
任一:
-
print
属性直接绕过相当无用的默认repr
:print(user.username, user.password)
或者。。。
-
为类定义一个
__repr__
,使其print(user)
(或只是在REPL中回显(具有一个有用的字符串形式:class User: # ... rest of class ... def __repr__(self): return '{0.__class__.__name__}({0.username!r}, {0.password!r})'.format(self)
选项1:在类的元类 中实现str((或repr
此选项更可取。
class User:
def __init__(self, username, password):
self.username = username
self.password = password
@classmethod
def from_dict(cls, data):
return cls(data['username'], data['password'])
def __str__(self):
return f'username : {self.username}, password : {self.password}'
def __repr__(self):
return f'User(username={self.username}, password={self.password})'
users = [
{'username': 'rolf', 'password': '123'},
{'username': 'teclado', 'password': '1234'}
]
user = [User.from_dict(user) for user in users]
# [username : rolf, password : 123, username : teclado, password : 1234]
print([u for u in user])
选项2:使用类__dict__
仅当您无法更改原始类时。
class User:
def __init__(self, username, password):
self.username = username
self.password = password
@classmethod
def from_dict(cls, data):
return cls(data['username'], data['password'])
users = [
{'username': 'rolf', 'password': '123'},
{'username': 'teclado', 'password': '1234'}
]
user = [User.from_dict(user) for user in users]
# [{'username': 'rolf', 'password': '123'}, {'username': 'teclado', 'password': '1234'}]
print([u.__dict__ for u in user])