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除法运算小技巧
Apr 05 Python
详解python单例模式与metaclass
Jan 15 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
Python pymongo模块用法示例
Mar 31 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
Python threading的使用方法解析
Aug 28 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
python生成器用法实例详解
Nov 22 Python
浅谈Django前端后端值传递问题
Jul 15 Python
python实现简易名片管理系统
Apr 11 Python
python基础学习之递归函数知识总结
May 26 Python
如何基于python实现单目三维重建详解
Jun 25 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 和 MYSQL
2006/10/09 PHP
PHP 错误之引号中使用变量
2009/05/04 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
jquery 分页控件实现代码
2009/11/30 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
python实现文件快照加密保护的方法
2015/06/30 Python
python中scikit-learn机器代码实例
2018/08/05 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
你对IPv6了解程度
2016/02/09 面试题
财务分析个人的自荐书范文
2013/11/24 职场文书
市场营销方案范文
2014/03/11 职场文书
品酒会策划方案
2014/05/26 职场文书
多媒体教室标语
2014/06/26 职场文书
高一军训决心书
2015/02/05 职场文书
公司放假通知怎么写
2015/04/15 职场文书
Vue详细的入门笔记
2021/05/10 Vue.js
Python爬虫基础初探selenium
2021/05/31 Python
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android