日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++定义一个动态对象数组_如何在Python中自定义一个可被调用的对象实例?

發布時間:2025/4/16 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++定义一个动态对象数组_如何在Python中自定义一个可被调用的对象实例? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在關于Python描述符函數的詳解三篇中,我們有提到如何基于類創建一個“描述符函數”,之所以能夠基于類創建這樣一個概念,是因為用到了類中的__call__屬性,從前述文章中可知,當類中定義了__call__屬性時,基于該類所創建的對象就成為一個可被調用的函數。這樣的做法我們已經知道,可是這中間的運行機制是怎樣的呢?這一篇文章中,我們將從函數的可被調用性入手來深入分析一下。

Python中的可調用操作符

當我們談到在Python中調用一個函數時,通常指的是在特定函數名后緊跟一對小括號,當然如果有參數的話,將參數包括在小括號中,甚至有人將函數名后的成對小括號稱為“調用操作符”,如果函數名后不帶成對小括號,那么Python解釋器只是給出這是一個函數的提示,并不會運行它,比如先定義一個函數say_hello:def say_hello(): print("Hello Python!")當不帶對成小括號時:say_hello輸出:<function?__main__.say_hello()>從上述輸出可知,Python解釋器只是告訴我們say_hello是一個函數,如果帶上成對小括號,那么該函數就會被執行:say_hello()輸出:Hello Python!很顯然,所有的函數都是可被調用的。但是當任意給出一個對象時,我們如何知道它是否可以被調用呢?難道要對每一個給定的對象都帶上成對小括號進行測試嗎?如果真是這樣的話,我們來看看那些不能被調用的對象帶上成對小括號后,結果會怎樣,比如我們來定義一個字符串,看看字符串是否可被調用:hello = "Hello, Python!"hello()

上述代碼在執行時被解釋器報出錯誤,從提示來看,是說str對象不具備可調用性,那么,有沒有一種方便的方法來測試哪些對象可被調用,哪些又不可被調用呢?答案是肯定,那就是callable()函數。

callable()函數

在Python的內置函數中,有一個callable()函數恰好是專門用來測試一個對象是否可被調用,當該對象可被調用時,它返回True,否則返回False,比如我們用它來測試一下上面創建的函數say_hello()函數和hello字符串:>>> callable(say_hello)>>>?輸出:True>>> callable(hello)>>> 輸出:False在之前的文章中,我們知道lambda函數是匿名函數,那么這類函數是可被調用的嗎?下面一個例子可給出說明:>>> callable(lambda x: x*x)>>>?輸出:True從輸出結果可知,lambda函數同樣屬于可被調用的對象。

類是可被調用的嗎?

從上面的分析,我們知道函數是可被調用的,字符串是不可被調用的,那么類是可被調用的嗎?為了方便起見,我們不用創建特別的類,就用Python的內置幾個類即可,比如str、int、dict、list,這些都是Python中最基本的類,更重要的是,它們都可以被緊跟其后的成對小括號來創建一個對象,比如我們常用的dict()等,因此,我們可猜測:它們都是可被調用的。下面來驗證一下該結論:types = [str, int, dict, list]for item in types: print("{} | callable: {}".format(type(item), callable(item)))

從上述輸出結果可知,這些基本類都是可被調用的,那么,我們自定義的類是否為可調用的呢?下面我們創建一個自定義類來看一下:class person: pass>>> callable(person)>>> 輸出:True上述結果表明,我們自定義的類也是可被調用的,也就是說person()這樣的調用是被準許的。但由上述創建的類person實例化的一個對象是否還可被調用呢?我們來繼續測試:p1 = person()p1()

程序出錯了,從錯誤提示來看,是說由person類創建的對象不具備可調用性。我們用callable()測試一下:>>> callable(p1)>>>?輸出:False果然,person類的實例不能被調用,那么我們是否可以創建出一個可被調用的類實例呢?答案依然是肯定的。

可被調用的類實例

在Python中,有一個特別的方法叫做__call__,它可以幫我們實現剛才的想法,比如我們重新修改person類:class person: def __init__(self, name): self.name = name def __call__(self): return "你好,{}!".format(self.name)在上述類中,我們用__init__方法完成對類實例的初始化,它接受一個名字做為新實例了名字,同時該類中也實現了__call__方法,它使得創建的實例具備了可調用性:>>> p2 = person("花花")>>> p2()>>>?輸出:'你好,花花!'非常棒!只要在所創建的類中實現__call__方法,則所創建的類實例便擁有了可調用的特性,也正是這樣,才使得基于類創建“描述符函數”成為可能。

小結

在這篇文章中,我們分析了對象的可調用性,并介紹了用來測試對象是否可被調用的callable()函數,之后又研究了如何在普通的類中添加__call__方法來創建一個可被調用的類實例,這些內容屬于Python知識點的較深度分析,供大家參閱。

總結

以上是生活随笔為你收集整理的c++定义一个动态对象数组_如何在Python中自定义一个可被调用的对象实例?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产a久久 | 国产精品va无码一区二区 | 午夜播放 | 日本高清免费观看 | 小sao货水好多真紧h无码视频 | 亚洲清色 | 亚洲啪av永久无码精品放毛片 | 精品人妻一区二区免费 | 波多野结衣导航 | 91sex国产| 韩国中文字幕hd久久精品 | 操到喷水 | 国产青青 | 成人a级大片 | 日韩黄| 日本在线观看www | 免费看成人啪啪 | 那个网站可以看毛片 | 久久艹艹 | 男人天堂2021 | 午夜视频91| 蜜桃av免费 | 激情综合区 | 琪琪秋霞午夜被窝电影网 | 熟女少妇一区二区三区 | 亚洲在线免费视频 | 草久在线观看 | 久久精品无码中文字幕 | 九九热在线免费观看 | √资源天堂中文在线 | 一本加勒比北条麻妃 | 清草视频 | 欧美网 | 激情三区 | 无码国产精品一区二区色情男同 | 欧美日韩在线二区 | 欧美一区二区三区久久成人精品 | 亚洲经典一区 | 姑娘第5集在线观看免费好剧 | 在线免费av网 | 操天天操| 国产精品伦一区二区三区 | 婷婷色婷婷开心五月四房播播 | 综合网五月天 | 黑人玩弄人妻一区二区三区影院 | 久久无吗视频 | www.97色| 欧美国产精品一区二区 | 好姑娘在线观看高清完整版电影 | 五月婷婷激情小说 | 国产四区 | 97国产在线视频 | 亚洲精品白浆高清久久久久久 | 亚洲精品热 | 香蕉视频97 | 免费www xxx| 特级毛片在线 | 亚洲精品少妇 | 日韩亚洲在线观看 | 国产青青青 | 欧美影院在线 | 成年人免费网址 | 黑人操bb| 徐锦江一级淫片免费看 | 成人av在线看| 国内91视频 | 国产精品69久久久久孕妇欧美 | 欧美一区二区免费在线观看 | 国产精品suv一区二区69 | 日韩黄色精品视频 | 日韩一区在线观看视频 | 丁香色婷婷 | 国产综合免费视频 | 国产在线精品一区二区三区 | 女人被狂躁c到高潮喷水电影 | 日韩电影在线一区 | 91久久影院| 男人操女人视频网站 | 男生把女生困困的视频 | 打屁股外国网站 | www.日本高清| 大黑人交xxx极品hd | 双女主黄文 | 精品亚洲国产成av人片传媒 | 亚洲欧美综合自拍 | 美女羞羞动态图 | 午夜激情婷婷 | 国产成人无码一区二区在线观看 | 免费黄色网页 | 国产femdom调教7777 | 日韩视频精品在线 | 99这里只有 | av中亚| 一区二区国产电影 | 午夜剧场福利 | 亚洲综合色成人 | 图片区 小说区 区 亚洲五月 | 国产乱码精品一区二区 | 曰本毛片 |