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 09 Python
在Python的web框架中配置app的教程
Apr 30 Python
python遍历数组的方法小结
Apr 30 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
解决Python传递中文参数的问题
Aug 04 Python
python中的迭代和可迭代对象代码示例
Dec 27 Python
Python入门之后再看点什么好?
Mar 05 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
浅谈pyqt5在QMainWindow中布局的问题
Jun 21 Python
python实现猜单词游戏
May 22 Python
Python日志器使用方法及原理解析
Sep 27 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 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上的memcache和memcached两个pecl库
2010/03/29 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
提高php编程效率技巧
2015/08/13 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
PHP基本语法实例总结
2016/09/09 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
调试php程序的简单步骤
2019/10/04 PHP
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
Python 列表(List)操作方法详解
2014/03/11 Python
python装饰器decorator介绍
2014/11/21 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
python调用百度语音识别api
2018/08/30 Python
python调用c++传递数组的实例
2019/02/13 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
公司年会晚宴演讲稿
2014/01/06 职场文书
2014年学校工作总结
2014/11/20 职场文书
西安导游词
2015/02/12 职场文书
中英文求职信范文
2015/03/19 职场文书
升职自荐信范文
2015/03/27 职场文书
特种设备安全管理制度
2015/08/06 职场文书
如何解决php-fpm启动不了问题
2021/11/17 PHP