第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

章節(jié)
問答
課簽
筆記
評論
占位
占位

Python類的__str__ 和 __repr__方法

對于Python的內(nèi)建對象,比如int、dict、list等,通過str()方法,可以把這些對象轉(zhuǎn)換為字符串對象輸出。

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()方法,同樣可以得到對象所對應(yīng)的字符串結(jié)果,只不過結(jié)果會有些難理解。

class Person:
    pass

bob = Person()
str(bob) # ==> '<__main__.Person object at 0x7fc77b859c50>'

<__main__.Person object at 0x7fc77b859c50>這個結(jié)果其實是Animal的實例cat在內(nèi)存中的地址,這是相當(dāng)難以理解的,不過引發(fā)思考的是,通過str()打印的數(shù)據(jù),是怎么來的呢?
這其實是對象的內(nèi)建方法
__str__返回的。
通過dir()方法,我們可以把對象的所有方法打印出來。

>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

可以看到,int、dict、list等的內(nèi)建對象都實現(xiàn)了自己的__str__()方法,可以把相應(yīng)的字符串返回,如果我們的類也想把容易理解的字符串輸出的話,那么我們也需要實現(xiàn)類的__str__()方法。

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
    def __str__(self):
        return 'name: {}, gender: {}'.format(self.name, self.gender)

bob = Person('Bob', 'Male')
str(bob) # ==> 'name: Bob, gender: Male'

但是,對于直接在終端輸入變量bob,得到的依然是這樣結(jié)果。

>>> bob
<__main__.Person object at 0x7fc77b859cc0>

而對于int、list等的對象,直接輸入變量也可得到可讀的結(jié)果。

>>> num = 12
>>> str(num)
'12'
>>> d = {1: 1, 2: 2}
>>> d
{1: 1, 2: 2}

__str__()函數(shù)似乎沒有在自定義類Person中生效,這是為什么呢?
這是因為 Python 定義了__str()__和__repr__()兩種方法,__str()__用于顯示給用戶,而__repr__()用于顯示給開發(fā)人員,當(dāng)使用str()時,實際調(diào)用的是__str__()方法,而直接輸入變量,調(diào)用的是__repr__()方法。

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
    def __str__(self):
        return 'name: {}, gender: {}'.format(self.name, self.gender)
    def __repr__(self):
        return 'name: {}, gender: {}'.format(self.name, self.gender)

bob = Person('Bob', 'Male')
str(bob) # ==> 'name: Bob, gender: Male'
>>> bob
'name: Bob, gender: Male'

任務(wù)

請給Student 類定義__str__和__repr__方法,使得能打印出'Student: name, gender, score'。

?不會了怎么辦

參考答案:

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score
    def __str__(self):
        return 'Student: {}, {}, {}'.format(self.name, self.gender, self.score)
    def __repr__(self):
        return 'Student: {}, {}, {}'.format(self.name, self.gender, self.score)

s = Student('Bob', 'Male', 88)
print(s)
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數(shù)過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務(wù)號

綁定后可得到

  • · 粉絲專屬優(yōu)惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復(fù)提醒
  • · 賬號支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請您關(guān)注公眾號
關(guān)注后,及時獲悉本課程動態(tài)

舉報

0/150
提交
取消
全部 精華 我要發(fā)布
全部 我要發(fā)布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發(fā)表

為什么扣積分?

本次提問將花費2個積分

繼續(xù)發(fā)表請點擊 "確定"

為什么扣積分?