首先,自定义的类在不继承任何基类的情况下,也具有__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