电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python類的綁定方法和非綁定方法實例解析

瀏覽:2日期:2022-08-04 10:56:32

一、綁定方法

1.對象的綁定方法

首先我們明確一個知識點,凡是類中的方法或函數,默認情況下都是綁定給對象使用的。下面,我們通過實例,來慢慢解析綁定方法的應用。

class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): pass p = People(’xiaohua’,18)print(p.talk)輸出結果:<bound method People.talk of <__main__.People object at 0x000000F802C69358>>

從上面的輸出結果來看,talk()?個類中的方法,是綁定給對象使用的。下面,我在看看另外一種情況。

class People: def __init__(self,name,age): self.name = name self.age = age def talk(): passp = People(’xiaohua’,18)print(p.talk)輸出結果:<bound method People.talk of <__main__.People object at 0x000000FF68F39358>>

現在,我們將talk()函數的參數去掉,結果顯示與上面是一樣。這說明,不管是類中的方法,還是類中函數,默認情況下都是綁定給對象使用的。綁定給對象使用有一種好處,那就是不用手動將對象傳入。對象是自動傳到類中。如果你不信,我們來看看下面的例子:

class People: def __init__(self,name,age): self.name = name self.age = age def talk(): passp = People(’xiaohua’,18)print(People.talk)print(p.talk)輸出結果:<function People.talk at 0x000000C54E3D0A60> 類來調用僅僅是當作函數使用<bound method People.talk of <__main__.People object at 0x000000C54E249358>> 而對象來調用則為綁定方法

上面很好說明了,如果類來調用類中的方法,那么這個方法僅僅只是一個函數,那么既然是函數,就不會有自動傳值這一功能。來看看下面代碼:

class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): passp = People(’xiaohua’,18)People.talk() 1p.talk() 2#代碼1處報錯talk() missing 1 required positional argument: ’self’#代碼2處正常

從上面輸出結果來看,當類調用類中的方法時候i,是不會進行自動傳值的,也就是說,函數有幾個參數,我們就得傳遞進去幾個參數。如果想結果正常運行,那么在類名調用talk()的時候,將參數一一都傳遞進去。即:

People.talk(312312)

?個參數可以是任意的,但是,必須傳遞進去。而,當對象調用類中方法時候,則不用傳遞,如上面的2正常執行。既然知道了區別,那么,我們來看看下面代碼:

class People: def __init__(self,name,age): self.name = name self.age = age def talk(): passp = People(’xiaohua’,18)People.talk() 1p.talk() 2# 1處正常執行# 2 處報錯talk() takes 0 positional arguments but 1 was given

從輸出結果來看,People來調用talk()方法時候,并不需要傳遞參數;而當對象來調用talk()的時候,由于對象調用自己的綁定方法,會自動將對象當作第一個參數傳遞進去,所以,當類中talk()方法沒有帶參數時,而你又給它傳遞了一個,顯然是會報錯的。

綜上所述,我們可以得出以下結論: 

1.凡是類中的方法和函數,都是綁定給對象使用的;

2.綁定方法都有自動傳值的功能。傳遞進去的值,就是對象本身。

3.如果類想調用綁定方法,就必須遵循函數的參數規則,有幾個參數,就必須傳遞幾個參數。

聰明的你,可能會問,既然類中的方法都是綁定給對象使用的,那么有沒有方法是綁定給類使用的呢?

答案是,當然有!

2.類的綁定方法

 既然類中的方法,默認都是綁定給對象使用,那么,我們要采取一點措施,將類中的綁定方法解除對象綁定關系,進而綁定到類上。

 在python中,引入了@classmethod方法,將類中的方法綁定到類身上。下面看看代碼:

class People: @classmethod def talk(cls): passp = People()print(People.talk)#輸出結果<bound method People.talk of <class ’__main__.People’>>

從上述結果可以看出,我們加上了一個裝飾器,將類中綁定給對象的方法,綁定到類身上了。我們之前分析過,如果一個方法綁定到誰身上,那么在調用該函數的時候,將自動將該調用者當作第一個參數傳遞到函數中。但是,綁定到類的方法與綁定到對象方法有一點點不同:

class People: def __init__(self,name): self.name = name @classmethod def talk(cls): passp = People(’xiaohua’)print(People.talk)print(p.talk)#輸出結果<bound method People.talk of <class ’__main__.People’>><bound method People.talk of <class ’__main__.People’>>

也就是說,當對象在調用類的綁定方法時,也會默認把類當作參數傳遞進去!所以下面執行正常,并不會因為?個方法綁定到類身上,而對象調用沒有傳遞參數,報錯!

class People: @classmethod def talk(cls): passp = People()People.talk()p.talk()

但是,如果talk()沒有參數,則下面代碼均會報錯。

class People: @classmethod def talk(): passp = People()People.talk()p.talk()#報錯結果talk() takes 0 positional arguments but 1 was given

兩者報錯結果一致,這就說明了,當對象來調用類的綁定方法時,也是自動將類傳遞進去,并不需遵循函數參數傳遞的規則。

對于類中的綁定方法,也基本上就這兩種,不管怎么變化,只要記住以下規則,遇到這種情況,都不會再錯。

類中方法默認都是綁定給對象使用,當對象調用綁定方法時,會自動將對象作為第一個參數傳遞進去;而類來調用,則必須遵循函數參數一一對應的規則,有幾個參數,就必須傳遞幾個參數。如果一個方法是用了@classmethod裝飾器,那么?個方法綁定到類身上,不管是對象來調用還是類調用,都會將類作為第一個參數傳遞進去。

二、非綁定方法

上面說了,類中的方法要么是綁定給對象使用,要么是綁定給類使用,那么有沒有不綁定給兩者使用的函數?

答案:當然有,python給我們提供了@staticmethod,可以解除綁定關系,將一個類中的方法,變為一個普通函數。

下面,我們來看看代碼示例:

import hashlibimport timeclass MySQL: def __init__(self,host,port): self.id=self.create_id() self.host=host self.port=port @staticmethod def create_id(): #就是一個普通工具 m=hashlib.md5(str(time.clock()).encode(’utf-8’)) return m.hexdigest()print(MySQL.create_id) #<function MySQL.create_id at 0x0000000001E6B9D8> #查看結果為普通函數conn=MySQL(’127.0.0.1’,3306)print(conn.create_id) #<function MySQL.create_id at 0x00000000026FB9D8> #查看結果為普通函數

從上面的輸出結果,我們可以看出,使用了@staticmethod裝飾了一個函數,那么這個函數跟普通函數沒有什么區別。既然是普通函數,那么就遵從函數參數傳遞規則,有幾個參數就傳遞幾個參數。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | 微波萃取合成仪-电热消解器价格-北京安合美诚科学仪器有限公司 | 执业药师报名条件,考试时间,考试真题,报名入口—首页 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 溶氧传感器-pH传感器|哈美顿(hamilton) | 建筑资质代办-建筑资质转让找上海国信启航| 钛合金标准件-钛合金螺丝-钛管件-钛合金棒-钛合金板-钛合金锻件-宝鸡远航钛业有限公司 | 磁力链接搜索神器_BT磁力狗_CILIMAO磁力猫_高效磁力搜索引擎2024 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | 温州食堂承包 - 温州市尚膳餐饮管理有限公司 | 客服外包专业服务商_客服外包中心_网萌科技 | 中矗模型-深圳中矗模型设计有限公司| 临朐空调移机_空调维修「空调回收」临朐二手空调 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 二氧化碳/活性炭投加系统,次氯酸钠发生器,紫外线消毒设备|广州新奥 | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 密度电子天平-内校-外校电子天平-沈阳龙腾电子有限公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 酒万铺-酒水招商-酒水代理| RS系列电阻器,RK_RJ启动调整电阻器,RQ_RZ电阻器-上海永上电器有限公司 | 高压管道冲洗清洗机_液压剪叉式升降机平台厂家-林君机电 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 搅拌磨|搅拌球磨机|循环磨|循环球磨机-无锡市少宏粉体科技有限公司 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 北京网络营销推广_百度SEO搜索引擎优化公司_网站排名优化_谷歌SEO - 北京卓立海创信息技术有限公司 |