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实现的百度站长自动URL提交小工具
Jun 27 Python
在Python中关于中文编码问题的处理建议
Apr 08 Python
详解Python的Twisted框架中reactor事件管理器的用法
May 25 Python
Django工程的分层结构详解
Jul 18 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
python如何保证输入键入数字的方法
Aug 23 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 Python
解决Python列表字符不区分大小写的问题
Dec 19 Python
使用Django搭建网站实现商品分页功能
May 22 Python
keras打印loss对权重的导数方式
Jun 10 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
如何使用PyCharm及常用配置详解
Jun 03 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生成UTF8文件的方法
2010/05/15 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
JavaScript中的事件处理
2008/01/16 Javascript
javascript 网页跳转的方法
2008/12/24 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
Python群发邮件实例代码
2014/01/03 Python
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
2015年世界水日活动总结
2015/02/09 职场文书
Windows server 2016服务器基本设置
2022/08/14 Servers