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 相关文章推荐
python创建和使用字典实例详解
Nov 01 Python
Python 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
Django应用程序中如何发送电子邮件详解
Feb 04 Python
python 换位密码算法的实例详解
Jul 19 Python
python和shell获取文本内容的方法
Jun 05 Python
在Python中使用Neo4j的方法
Mar 14 Python
python程序变成软件的实操方法
Jun 24 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
Python中的 ansible 动态Inventory 脚本
Jan 19 Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 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
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
PHP7 标准库修改
2021/03/09 PHP
sina的lightbox效果。
2007/01/09 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
使用js获取伪元素的content实例
2017/10/24 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
vue 弹出遮罩层样式实例
2020/07/22 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
python中的字典使用分享
2016/07/31 Python
不可错过的十本Python好书
2017/07/06 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
python配置文件写入过程详解
2019/10/19 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
详解Python3中的 input() 函数
2020/03/18 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
医院门卫岗位职责
2013/12/30 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
2015年新学期寄语
2015/02/26 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript