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+Django在windows下的开发环境配置图解
Nov 11 Python
Python中类型关系和继承关系实例详解
May 25 Python
详解 Python中LEGB和闭包及装饰器
Aug 03 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
python学习教程之使用py2exe打包
Sep 24 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
Django框架视图层URL映射与反向解析实例分析
Jul 29 Python
keras.layer.input()用法说明
Jun 16 Python
python3 kubernetes api的使用示例
Jan 12 Python
bat批处理之字符串操作的实现
Mar 16 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 11 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 gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
2010/05/15 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
php导出CSV抽象类实例
2014/09/24 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
js版本A*寻路算法
2006/12/22 Javascript
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
python调用win32接口进行截图的示例
2020/11/11 Python
分享一个python的aes加密代码
2020/12/22 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
售房协议书
2014/08/19 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
2014大学生批评与自我批评思想汇报
2014/09/21 职场文书