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内置函数dir详解
Apr 14 Python
python使用Queue在多个子进程间交换数据的方法
Apr 18 Python
python实现将元祖转换成数组的方法
May 04 Python
python虚拟环境virualenv的安装与使用
Dec 18 Python
python如何实现一个刷网页小程序
Nov 27 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
python 批量添加的button 使用同一点击事件的方法
Jul 17 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
Jun 04 Python
python爬虫如何解决图片验证码
Feb 14 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
php4的session功能评述(一)
2006/10/09 PHP
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
PHP 验证码的实现代码
2011/07/17 PHP
那些年一起学习的PHP(三)
2012/03/22 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
PHP生成树的方法
2015/07/28 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
javascript 节点遍历函数
2010/03/28 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
jQuery限制图片大小的方法
2016/05/25 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
2020/07/29 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python入门之后再看点什么好?
2018/03/05 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
详解Python传入参数的几种方法
2019/05/16 Python
python线程信号量semaphore使用解析
2019/11/30 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
2020/06/02 Python
工程力学硕士生的自我评价范文
2013/11/16 职场文书
婚礼司仪主持词
2014/03/14 职场文书
意向协议书范本
2014/04/23 职场文书
美术课外活动总结
2014/07/08 职场文书
2015年工商所工作总结
2015/05/21 职场文书
三八妇女节主持词
2015/07/04 职场文书
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis
Python中字符串对象语法分享
2022/02/24 Python