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中的推导式使用详解
Jun 03 Python
在 Python 应用中使用 MongoDB的方法
Jan 05 Python
Python在图片中添加文字的两种方法
Apr 29 Python
Python进阶_关于命名空间与作用域(详解)
May 29 Python
Python微信库:itchat的用法详解
Aug 14 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
python机器学习之随机森林(七)
Mar 26 Python
python:print格式化输出到文件的实例
May 14 Python
Python中dict和set的用法讲解
Mar 28 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
ROS系统将python包编译为可执行文件的简单步骤
Jul 25 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
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
php不写闭合标签的好处
2014/03/04 PHP
PHP实现远程下载文件到本地
2015/05/17 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
Javascript的一种模块模式
2008/03/22 Javascript
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
十个Python程序员易犯的错误
2015/12/15 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
opencv+python实现均值滤波
2020/02/19 Python
Python函数参数分类原理详解
2020/05/28 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
局域网标准
2016/09/10 面试题
成品仓管员岗位职责
2013/12/11 职场文书
幼儿教师考核制度
2014/01/25 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
2014年学生会工作总结
2014/11/07 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
开除员工通知
2015/04/22 职场文书