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 fabric实现远程部署
Jan 05 Python
详解Golang 与python中的字符串反转
Jul 21 Python
python 编写简单网页服务器的实例
Jun 01 Python
python进阶之多线程对同一个全局变量的处理方法
Nov 09 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
使用python实现kNN分类算法
Oct 16 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
Python super()函数使用及多重继承
May 06 Python
python 实现朴素贝叶斯算法的示例
Sep 30 Python
总结Python变量的相关知识
Jun 28 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
供参考的 php 学习提高路线分享
2011/10/23 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
php验证session无效的解决方法
2014/11/04 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
php强制下载文件函数
2016/08/24 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
python中的字典使用分享
2016/07/31 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
python 多线程串行和并行的实例
2019/02/22 Python
python爬虫用mongodb的理由
2020/07/28 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
财务会计人员岗位职责
2013/11/30 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
会计主管岗位职责
2015/04/02 职场文书