Python自定义的类,为什么需要重写__str__

来源:互联网 发布:淘宝分享有礼怎么设置 编辑:程序博客网 时间:2024/05/20 06:07

首先,自定义的类在不继承任何基类的情况下,也具有__str__属性:

class RoundFloatManual(object):...     def __init__(self, val):...             assert isinstance(val, float), \...             "Value must be a float!"...             self.value = round(val, 2)

rfm = RoundFloatManual(5.590464)

dir(rfm)

返回:

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'value']

__str__ 是 Python 類中的特殊方法,他的回傳值就是使用 str(x) 所得到的值, 而 print(x) 其實就等於是 print(str(x)).其實再講細一點,當我們呼叫 str(x) 的時候其實是呼叫x.__str__()

也就是說我們可以這樣想像:

print(x) === print(str(x)) === print(x.__str__())

一般我們 自定義的類__str__ 方法的回傳值是默認的字串,比如說: <__main__.Mylist object at 0x0071A470> 用以說明 namespace, class name 和位置.如果要改變__str__ 的回傳值,我們必須要覆寫他.


参考:https://segmentfault.com/q/1010000005110206

1 0
原创粉丝点击