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开发实例分享bt种子爬虫程序和种子解析
May 21 Python
Python THREADING模块中的JOIN()方法深入理解
Feb 18 Python
Python实现把xml或xsl转换为html格式
Apr 08 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
Jun 12 Python
python实现的自动发送消息功能详解
Aug 15 Python
Django 请求Request的具体使用方法
Nov 11 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
Nov 11 Python
python获取带有返回值的多线程
May 02 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 输出简单动态WAP页面
2009/06/09 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
js 操作符实例代码
2009/10/24 Javascript
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
document.createElement()用法
2013/03/13 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
Angular2库初探
2017/03/01 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
JS库之Highlight.js的用法详解
2017/09/13 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
python文件和文件夹复制函数
2020/02/07 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
一年级学生期末评语
2014/04/21 职场文书
诚信贷款承诺书
2014/05/30 职场文书
项目经理任命书内容
2014/06/06 职场文书
党支部三会一课计划
2014/09/24 职场文书
2015年售后服务工作总结
2015/04/25 职场文书