47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
Day_4 参考解答
|
||
=============
|
||
主题:面向对象(一)—— 类和实例。
|
||
建议:先自己写,写不出来再看;看完后关掉文件自己默写一遍。
|
||
"""
|
||
|
||
class User:
|
||
all_users = [] # 类属性:模拟数据库表
|
||
|
||
def __init__(self, name, email, age):
|
||
self.name = name
|
||
self.email = email
|
||
self.age = age
|
||
User.all_users.append(self) # 把新用户"存表"
|
||
|
||
def get_full_name(self):
|
||
return f"用户:{self.name}({self.email})"
|
||
|
||
def __str__(self):
|
||
# 给"人"看的:print(user) 时显示,Django admin 列表里显示的就是它
|
||
return self.name
|
||
|
||
def __repr__(self):
|
||
# 给"开发者调试"看的:要能还原出原对象,eval(repr(u)) 应得到相同信息
|
||
return f"User(name={self.name!r}, email={self.email!r}, age={self.age!r})"
|
||
|
||
|
||
if __name__ == '__main__':
|
||
u1 = User("zhangsan", "zs@163.com", 20)
|
||
u2 = User("lisi", "ls@163.com", 21)
|
||
u3 = User("wangwu", "ww@163.com", 19)
|
||
|
||
for u in User.all_users:
|
||
print(u, "->", repr(u))
|
||
# zhangsan -> User(name='zhangsan', email='zs@163.com', age=20)
|
||
# lisi -> User(name='lisi', email='ls@163.com', age=21)
|
||
# wangwu -> User(name='wangwu', email='ww@163.com', age=19)
|
||
|
||
restored = eval(repr(u1)) # __repr__ 的用途:可还原
|
||
print(restored.name, restored.email) # zhangsan zs@163.com
|
||
|
||
# 思考题答案:
|
||
# __str__ 面向普通用户/展示,__repr__ 面向开发者/调试,且要求无歧义可还原;
|
||
# 只实现 __repr__ 时,print() 会退而使用 __repr__;反之不会。
|