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中__call__用法实例
Aug 29 Python
python模拟enum枚举类型的方法小结
Apr 30 Python
批处理与python代码混合编程的方法
May 19 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
python实现合并两个排序的链表
Mar 03 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
python next()和iter()函数原理解析
Feb 07 Python
Python 下载Bing壁纸的示例
Sep 29 Python
Python 数据分析之逐块读取文本的实现
Dec 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
收集的PHP中与数组相关的函数
2007/03/22 PHP
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
angular2使用简单介绍
2016/03/01 Javascript
domReady的实现案例
2016/11/23 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
python决策树之C4.5算法详解
2017/12/20 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
What is view? why do we have view?
2012/06/22 面试题
物业管理专业个人的自我评价
2013/11/19 职场文书
辅导员评语
2014/05/04 职场文书
2014年内勤工作总结
2014/11/24 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
横空出世观后感
2015/06/09 职场文书
600字作文之感受大自然
2019/11/27 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python