您好,登錄后才能下訂單哦!
這篇文章主要講解了“python的call、len、str、repr怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python的call、len、str、repr怎么使用”吧!
說明:
讓一個類的實例變成可執行的。
案例:
class Cat:'''貓類'''def __init__(self, name):self.name = name self.count = 0def eat(self):print(f'{self.name}正在進食!')def __call__(self, *args, **kwds) -> int:for i in args:self.count += 1print(f'{self.name}抓到了{i},已抓到了{self.count}只獵物')return self.count white_cat = Cat('大白貓')white_cat('麻雀', '老鼠')out:大白貓抓到了麻雀,已抓到了1只獵物 大白貓抓到了老鼠,已抓到了2只獵物
white_cat(‘麻雀’, ‘老鼠’)效果完全等價于white_cat.__call__(‘麻雀’, ‘老鼠’)。實際上就是解釋器做了個約定:實例后面()時實際就是調用該實例的__call__方法。
假如你定義的類的綁定方法只有一個(或某個方法使用頻率非常高),那么可以把那個方法名寫成__call__,這樣后續使用時會方便很多,可以直接用實例名()來執行。
說明:
對實例執行len()時實際就是調用它的__len__方法。
案例:
class Cat:'''貓類'''def __init__(self, name):self.name = name self.preys = []def __len__(self):return len(self.preys)def eat(self):print(f'{self.name}正在進食!')def __call__(self, *args, **kwargs):self.preys.extend(args)for i in args:print(f'{self.name}抓到了{i}')print(f'{self.name}抓到了{len(self)}只獵物!')white_cat = Cat('大白貓')white_cat('小麻雀', '小老鼠')white_cat('大麻雀', '大老鼠')white_cat('小貓魚', '大青魚')out:大白貓抓到了小麻雀 大白貓抓到了小老鼠 大白貓抓到了2只獵物! 大白貓抓到了大麻雀 大白貓抓到了大老鼠 大白貓抓到了4只獵物! 大白貓抓到了小貓魚 大白貓抓到了大青魚 大白貓抓到了6只獵物!
在這個案例中對之前的代碼做了優化,現在的大白貓還能記住它抓到的所有獵物,當你len(white_cat)就可以知道大白貓抓到了幾只獵物。
對一個實例使用len()時,實際上就是在調用這個實例的__len__方法。
說明:
可以自定義打印實例時字符串的內容。
案例:
class Cat:'''貓類'''def __init__(self, name):self.name = name self.preys = []def __len__(self):return len(self.preys)def eat(self):print(f'{self.name}正在進食!')def __call__(self, *args, **kwargs):self.preys.extend(args)for i in args:print(f'{self.name}抓到了{i}')print(f'{self.name}抓到了{len(self)}只獵物!')def __repr__(self):return f'啊,{self.name}抓住了“{",".join(self.preys)}”這些獵物。'def __str__(self):return f'哇,{self.name}抓住了“{",".join(self.preys)}”這些獵物。'white_cat = Cat('大白貓')white_cat('小麻雀', '小老鼠')white_cat('大麻雀', '大老鼠')white_cat('小貓魚', '大青魚')print(white_cat)out:大白貓抓到了小麻雀 大白貓抓到了小老鼠 大白貓抓到了2只獵物! 大白貓抓到了大麻雀 大白貓抓到了大老鼠 大白貓抓到了4只獵物! 大白貓抓到了小貓魚 大白貓抓到了大青魚 大白貓抓到了6只獵物! 哇,大白貓抓住了“小麻雀,小老鼠,大麻雀,大老鼠,小貓魚,大青魚”這些獵物。
打印實例時會先調用__str__方法,沒有__str__方法時會調用__repr__方法,兩者都沒有時打印的是類似這樣的:“<main.Cat object at 0x00000299EE6C45E0>”。
__str__方法和__repr__方法的區別:
print()時會先調用__str__方法,沒有__str__方法時才調用__repr__方法。
在交互模式下直接輸入實例回車時顯示的是__repr__方法返回的內容。
str函數和repr函數的區別:
當參數是字符串數據類型時它們返回的內容不完全一致,其他的數據類型返回的內容完全一致。
test1 = 123ret1 = str(test1)ret2 = repr(test1)print(ret1, ret2, ret1 == ret2)test1 = '123'ret1 = str(test1)ret2 = repr(test1)print(ret1, ret2, ret1 == ret2)out:123 123 True123 '123' False
注意:對字符串數據進行repr后得到的內容會多一對單引號,長度會加2;對字符串數據進行str后得到的內容和原來一樣。
感謝各位的閱讀,以上就是“python的call、len、str、repr怎么使用”的內容了,經過本文的學習后,相信大家對python的call、len、str、repr怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。