python class自身返回值研究

在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一看究竟

结果发现了几行代码

python class自身返回值研究

 

 

可以看到使用了__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

python class自身返回值研究

 

看到了__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的基本信息

 

上一篇:【转载】 C#中日期类型DateTime的日期加减操作


下一篇:FastAPI(28)- JSON Compatible Encoder 利器之 jsonable_encoder