Python绑定方法与非绑定方法详解


Posted in Python onAugust 18, 2017

本文实例为大家分享了Python绑定方法与非绑定方法,供大家参考,具体内容如下

定义:

绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入):

1. 绑定到类的方法:用classmethod装饰器装饰的方法。

                为类量身定制

                类.boud_method(),自动将类当作第一个参数传入

              (其实对象也可调用,但仍将类当作第一个参数传入)

2. 绑定到对象的方法:没有被任何装饰器装饰的方法。

               为对象量身定制

               对象.boud_method(),自动将对象当作第一个参数传入

             (属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)

非绑定方法:用staticmethod装饰器装饰的方法

       不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已

注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说

二、绑定方法

绑定给对象的方法(略)

绑定给类的方法(classmethod)

classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入),python为我们内置了函数classmethod来把类中的函数定义成类方法

import settings
class MySQL:
 def __init__(self,host,port):
  self.host=host
  self.port=port

 @classmethod
 def from_conf(cls):
  print(cls)
  return cls(settings.HOST,settings.PORT)

print(MySQL.from_conf) #<bound method MySQL.from_conf of <class '__main__.MySQL'>>
conn=MySQL.from_conf()

conn.from_conf() #对象也可以调用,但是默认传的第一个参数仍然是类

三、非绑定方法

在类内部用staticmethod装饰的函数即非绑定方法,就是普通函数

statimethod不与类或对象绑定,谁都可以调用,没有自动传值效果

import hashlib
import time
class 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.time()).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> #查看结果为普通函数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
python 编码规范整理
May 05 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
Python和Go语言的区别总结
Feb 20 Python
Python深拷贝与浅拷贝用法实例分析
May 05 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
Jun 11 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 Python
python字典DICT类型合并详解
Aug 17 #Python
Python时间的精准正则匹配方法分析
Aug 17 #Python
Python实现运行其他程序的四种方式实例分析
Aug 17 #Python
python进阶_浅谈面向对象进阶
Aug 17 #Python
Python 比较两个数组的元素的异同方法
Aug 17 #Python
python使用opencv读取图片的实例
Aug 17 #Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 #Python
You might like
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
JS 页面计时器示例代码
2013/10/28 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
常用的javascript设计模式
2017/01/11 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
jquery实现吸顶导航效果
2020/01/08 jQuery
Vue简单实现原理详解
2020/05/07 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
法学毕业生自我鉴定
2013/11/08 职场文书
学校采购员岗位职责
2014/01/02 职场文书
银行求职信
2014/05/31 职场文书
师范毕业生求职信
2014/07/11 职场文书
建筑安全生产责任书
2014/07/22 职场文书
委托书怎么写
2014/07/31 职场文书
买房子个人收入证明
2014/10/12 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
暑假安全保证书
2015/02/28 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
win10下go mod配置方式
2021/04/25 Golang
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL