什么是类的特殊方法
让我们来举个例子:
print(list_)
[1,2,3,4]
这里可以看到通过print(list)可以输出一个列表我们假设是1,2,3,4
通过print(list)输出1,2,3,4
我们来定义一个类
print(p)
<_main_.person object at 0x7fc77b859c50>
这个类用p来表示
通过输出prnt(p)也可以得到一些信息
这俩个数据都是通过print来输出的 那么问题就来了这些信息在哪里输出的呢?通过什么输出的呢? 这就是特殊方法的作用
在print的时候其实调用了_str_()特殊方法
他有些特点
- 双下划线开头
- 双下划线结束
- 每个python对象都有特殊方法
print(list_._str_())
print(p._str_())
这样也可以得到同样的效果甚至可以改变特殊方法来实现输出不同的内容
除了_str_()的特殊方法还有其他的数字运算特殊方法:_add_(),_sub_(),_mul_(),_truediv_()
上面的特殊方法依次为 加 减 乘 除
len()函数:_len()_
python 类的_ste_和_repr_方法
对于Python的内建对象,比如int、dict、list等,通过str()方法,可以把这些对象转换为字符串对象输出
num = 12
str(num) # ==> '12'
d = {1: 1, 2: 2}
str(d) # ==> '{1: 1, 2: 2}'
l = [1,2,3,4,5]
str(l) # ==> '[1, 2, 3, 4, 5]'
对于自定义对象,通过str()方法,同样可以得到对象所对应的字符串结果,只不过结果会有些难理解。
class Person:
pass
bob = Person()
str(bob) # ==> '<__main__.Person object at 0x7fc77b859c50>'
<__main__.Person object at 0x7fc77b859c50>这个结果其实是Animal的实例cat在内存中的地址,这是相当难以理解的,不过引发思考的是,通过str()打印的数据,是怎么来的呢?
这其实是对象的内建方法__str__返回的。
通过dir()方法,我们可以把对象的所有方法打印出来。
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__'