在python中,如果你写了这样一串代码:
import datetime a = datetime.date(2021, 9, 1) b = "2021-09-01" print(a, b) print([a, b]) print(type(a), type(b))
你会发现 a 是一个datetime.date的类
而b是个字符串
但在输出时,却出现了这样的结果
2021-09-01 2021-09-01 [datetime.date(2021, 9, 1), '2021-09-01'] <class 'datetime.date'> <class 'str'>
可以发现,在a单独输出时,竟然输出了字符串!
而a的类型依然是datetime.date的类
这是怎么回事呢
要知道,在python中定义一个类,输出这个类会输出这个类的信息
class test: pass a = test() print(a)
输出:
<__main__.test object at 0x000001B344057070>
那为什么datetime.date返回的不是以上输出的,而是一个字符串呢?
我就打开了datetime.py一看究竟
结果发现了几行代码
可以看到使用了__repr__
通过我仔细的研究
我发现__repr__可以修改class的输出信息
class test: def __repr__(self): return "This is a class" a = test() print(a)
输出:
This is a class
又回到开头的问题
可以看到在数组输出是已经可以输出__repr__修改过的信息
但是在单独输出是,还是输出了与__repr__不同的信息
于是我又打开了datetime.py
看到了__str__可以定义class的格式
不过__str__需要赋值一个函数的名称
class test: def __repr__(self): return "This is a class" def make(self): return "You make a class" __str__ = make a = test() print(a)
输出:
You make a class
总结
从datetime的发现中学到了很多关于class的更深入的使用
可以使用__repr__和__str__设置class的基本信息