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文件处理
Feb 29 Python
python对象与json相互转换的方法
May 07 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
django-allauth入门学习和使用详解
Jul 03 Python
python监控进程状态,记录重启时间及进程号的实例
Jul 15 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
Python configparser模块操作代码实例
Jun 08 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 Python
FP-growth算法发现频繁项集——发现频繁项集
Jun 24 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 数组的创建、调用和更新实现代码
2009/03/09 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
PHP实现文件上传与下载
2020/08/28 PHP
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
在Python的Django框架中编写错误提示页面
2015/07/22 Python
Python爬取三国演义的实现方法
2016/09/12 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
2018/10/09 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
介绍一下write命令
2012/09/24 面试题
国外的一些J2EE面试题一
2012/10/13 面试题
初三毕业评语
2014/12/26 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书