自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何為 Python 基本類型自定義方法?

開(kāi)發(fā) 后端
我們知道,字符串str、整型int、浮點(diǎn)數(shù)float是 Python 的三大基本數(shù)據(jù)類型。

 我們知道,字符串str、整型int、浮點(diǎn)數(shù)float是 Python 的三大基本數(shù)據(jù)類型。

[[347272]]

我們也知道,在 Python 里面,一切都是對(duì)象,而對(duì)象一般有方法。所以,大家會(huì)看到下面這種寫法:

 

  1. a = 'abcde' 
  2. b = a.upper() 
  3. print(b) 

其中的.upper()就是把字母轉(zhuǎn)成大寫的方法。

我們?cè)趯懽约旱念悤r(shí),常常會(huì)定義很多的方法。那么,當(dāng)字符串自帶的方法不夠時(shí),我們是否有辦法自定義一些方法呢?

比如說(shuō),我想要一個(gè)方法叫做.are_you_short(),如果字符串的長(zhǎng)度小于5,返回 True,字符串的長(zhǎng)度大于等于5,返回 False。

我雖然可以單獨(dú)定義一個(gè)類來(lái)做這件事情:

 

  1. class MyStr: 
  2.     def __init__(self, value): 
  3.         self.value = value 
  4.  
  5.     def are_you_short(self): 
  6.         return len(self.value) < 5 

運(yùn)行效果如下圖所示:

 

但問(wèn)題是,現(xiàn)在根據(jù)MyStr類初始化的對(duì)象,它看起來(lái)完全不像一個(gè)字符串。它只是一個(gè)普通的對(duì)象了。大家對(duì)比一下普通字符串的行為和這個(gè)MyStr對(duì)象的行為:

 

MyStr對(duì)象,不僅打印不出內(nèi)容,而且還不能通過(guò)加號(hào)進(jìn)行拼接。

看到這里,可能有同學(xué)會(huì)認(rèn)為我要講魔術(shù)方法了。例如給MyStr實(shí)現(xiàn).__str__()方法,就能打印出內(nèi)容;實(shí)現(xiàn).__add__()方法,就可以實(shí)現(xiàn)用加號(hào)拼接。

但等等,哪里需要這么麻煩?一般有這種想法的同學(xué),是剛剛學(xué)完 Python 的魔術(shù)方法,覺(jué)得什么事情都可以用魔術(shù)方法來(lái)解決。

但實(shí)際上,要實(shí)現(xiàn)字符串的所有方法非常簡(jiǎn)單!

東西學(xué)得越多,就越容易把最簡(jiǎn)單的知識(shí)給忘記了。想想是不是還有一個(gè)東西叫做繼承?

我們修改一下MyStr的定義:

 

  1. class MyStr(str): 
  2.     def are_you_short(self): 
  3.         return len(self) < 5 

運(yùn)行效果如下圖所示:

 

不需要手動(dòng)實(shí)現(xiàn)任何的魔術(shù)方法,直接就能擁有字符串的全部能力。

大家也可以對(duì) int、float甚至是列表、字典試一試,來(lái)實(shí)現(xiàn)自己的數(shù)據(jù)類型。

需要注意的是,在繼承 Python 的數(shù)據(jù)類型時(shí)不要手動(dòng)寫出__init__()方法,除非你知道你在干什么。

責(zé)任編輯:華軒 來(lái)源: 未聞Code
相關(guān)推薦

2021-01-21 07:35:40

JenkinsUICSS

2010-01-15 15:26:46

VB.NET自定義類型

2010-03-05 10:04:38

Python運(yùn)算符

2020-03-28 16:04:26

數(shù)據(jù)科學(xué)Matplotlib圖表

2020-11-19 10:50:43

ImportPython代碼

2013-06-27 11:10:01

iOS開(kāi)發(fā)自定義UISlider

2017-02-17 09:37:12

Android自定義控件方法總結(jié)

2009-12-23 14:49:46

WPF面板

2013-05-02 14:08:18

2024-03-04 11:13:29

Django數(shù)據(jù)庫(kù)Python

2009-12-24 15:22:10

WPF繼承自定義窗口

2009-09-07 22:00:15

LINQ自定義

2010-02-07 14:02:16

Android 界面

2019-09-02 09:48:39

Redis數(shù)據(jù)結(jié)構(gòu)對(duì)象

2009-10-16 13:08:40

VB自定義類型參數(shù)

2023-10-31 09:10:39

2009-08-12 14:53:50

C#類型轉(zhuǎn)換函數(shù)

2009-07-21 09:31:00

Scala基本類型文本

2015-02-12 15:33:43

微信SDK

2022-01-14 09:17:13

PythonAPISIX插件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)