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 26 Python
Python的高级Git库 Gittle
Sep 22 Python
python实现查询IP地址所在地
Mar 29 Python
python处理html转义字符的方法详解
Jul 01 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
Jul 11 Python
opencv 阈值分割的具体使用
Jul 08 Python
python如何变换环境
Jul 21 Python
Python私有属性私有方法应用实例解析
Sep 15 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插入操作实例
2015/01/21 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
通过原生vue添加滚动加载更多功能
2019/11/21 Javascript
解决python写的windows服务不能启动的问题
2014/04/15 Python
python绘制双柱形图代码实例
2017/12/14 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
解决python 文本过滤和清理问题
2019/08/28 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
竞选班长自荐书范文
2014/03/09 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
小学班主任事迹材料
2014/12/17 职场文书
开学第一天的感想
2015/08/10 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL