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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
python 获取本机ip地址的两个方法
Feb 25 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
对Python3中的input函数详解
Apr 22 Python
python中copy()与deepcopy()的区别小结
Aug 03 Python
Linux下多个Python版本安装教程
Aug 15 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
Oct 31 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
python pygame实现球球大作战
Nov 25 Python
Python用户自定义异常的实现
Dec 25 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 Python
python中sys模块的介绍与实例
Apr 17 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/01/07 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
PHP微商城开源代码实例
2019/03/27 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
python实现的udp协议Server和Client代码实例
2014/06/04 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
个人委托书怎么写
2014/04/04 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
欠款起诉书范文
2015/05/19 职场文书
单身证明范本
2015/06/15 职场文书
企业宣传稿范文
2015/07/23 职场文书