Python-Class方法返回Object.如何读取对象数据



学习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>

任一:

  1. print属性直接绕过相当无用的默认repr:

    print(user.username, user.password)
    

    或者。。。

  2. 为类定义一个__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])

最新更新