面向对象【林老师版】:绑定方法与非绑定方法(十七)
一、类中定义的函数分成两大类
1:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入):
绑定到类的方法:用classmethod装饰器装饰的方法。
为类量身定制类.boud_method(),自动将类当作第一个参数传入(其实对象也可调用,但仍将类当作第一个参数传入)
绑定到对象的方法:没有被任何装饰器装饰的方法。
为对象量身定制对象.boud_method(),自动将对象当作第一个参数传入(属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)
2、:非绑定方法:用staticmethod装饰器装饰的方法
- 不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已
注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说
二、绑定方法
绑定给对象的方法(略)
绑定给类的方法(classmethod)
classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入),python为我们内置了函数classmethod来把类中的函数定义成类方法
#settings.py
HOST='127.0.0.1'
PORT=3306
DB_PATH=r'C:\Users\Administrator\PycharmProjects\test\面向对象编程\test1\db'#test.py
import settings
class MySQL:def __init__(self,host,port):self.host=hostself.port=port@classmethoddef 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=hostself.port=port@staticmethoddef 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> #查看结果为普通函数
四、classmethod与staticmethod的对比
import settings
class MySQL:def __init__(self,host,port):self.host=hostself.port=port@staticmethoddef from_conf():return MySQL(settings.HOST,settings.PORT)# @classmethod #哪个类来调用,就将哪个类当做第一个参数传入# def from_conf(cls):# return cls(settings.HOST,settings.PORT)def __str__(self):return '就不告诉你'class Mariadb(MySQL):def __str__(self):return '<%s:%s>' %(self.host,self.port)m=Mariadb.from_conf()
print(m) #我们的意图是想触发Mariadb.__str__,但是结果触发了MySQL.__str__的执行,打印就不告诉你:
转载于:https://www.cnblogs.com/luoahong/p/9945470.html
面向对象【林老师版】:绑定方法与非绑定方法(十七)相关推荐
- Day20:绑定方法与非绑定办法、多态和多态性
一.绑定方法与非绑定方法 类中定义的函数分成两大类: 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定 ...
- Python基础教程:绑定方法和非绑定详细用法
绑定和方法调用 1.首先,方法仅仅是类内部定义的函数.(这意味着方法是类属性而不是实例属性) 2.其次,方法只有在其所属的类拥有实例时,才能被调用.当存在一个实例时,方法才被认为是绑定到那个实例了.没 ...
- python:绑定方法和非绑定方法
类中定义的方法大致可以分为两类:绑定方法和非绑定方法.其中绑定方法又可以分为绑定到对象的方法和绑定到类的方法. 一.绑定方法 1.1 对象的绑定方法 在类中没有被任何装饰器修饰的方法就是 绑定到对象的 ...
- 绑定方法和非绑定方法
绑定方法 绑定方法:绑定给谁就是给谁用 绑定到对象的方法:凡是在类中定义的函数(没有被任何装饰器修饰),都是绑定给对象用的:特点:obj.bar()自动把obj当作第一个参数传入. 绑定到类的方法:在 ...
- 全面解析python类的绑定方法与非绑定方法(转载+自己的消化与理解)
参考链接来自: https://www.cnblogs.com/vipchenwei/p/7126772.html#_label1 先说下,这篇文章中,其实有这么个事情: 也就是,该文章有的函数后面没 ...
- python_day7 绑定方法与非绑定方法
在类中定义函数如果 不加装饰器 则默认 为对象作为绑定方法 如果增加 classmethod 是 以 类 作为绑定方法 增加 classmethod 是 非绑定方法,就是不将函数 绑定 ####### ...
- Day7 子类调用父类的方法supper 绑定方法与非绑定方法
supper:可以利用supper来重用父类的方法,可以不用指名道姓的调用了. 1 class OldboyPeople: 2 school = 'oldboy' 3 def __init__(sel ...
- python123怎么绑定慕课_python学习30——绑定方法与非绑定方法
一 绑定方法与非绑定方法 类中定义的函数分为两大类:绑定方法和非绑定方法 其中绑定方法又分为绑定到对象的对象方法和绑定到类的类方法. 在类中正常定义的函数默认是绑定到对象的,而为某个函数加 ...
- static方法与非static方法是否可以互相调用
情况一.static方法调用非static方法 非静态方法只有实例对象才可调用,而静态方法随着类的加载而加载,类的加载在实例对象产生之前,所以静态方法不能调用非静态方法 情况二.非atic方法调用st ...
- salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)
在salesforce的classic中,我们使用{!expresion}在前台页面展示信息,在lightning中,上一篇我们也提及了,如果展示attribute的值,可以使用{!v.expresi ...
最新文章
- restore还原不同名称的数据库_SQL Server2005还原数据库攻略
- 【pmcaff专栏】项目管理失败?如何避免?
- Dubbo启动,调用方法失败【问题:调用超时】
- 无线路由器和计算机怎么连接网络连接,华为无线路由器怎么连接宽带上网
- 小车手app安卓版下载_古筝大师app下载-古筝大师下载v2.1.2 安卓版
- 2019-06-13 Java学习日记之MySql
- 7-36 社交网络图中结点的“重要性”计算 (30 分)(思路加详解)兄弟们PTA乙级题目冲起来
- 【leetcode 简单】 第八十四题 两个数组的交集
- 杨澜对话华为周跃峰:发展数字经济,存储技术是关键
- opencv+Dlib python大眼代码
- php 获取某周的最后一天,PHP获取本周首先天和最后一天
- 写学术论文的一些感想
- 【真人手势动画制作软件】万彩手影大师教程 | 预览、保存及发布视频
- Windows95 程序设计指南(Windows 95 A Developer's Guside)
- 爬取微博评论并存入MySQL,并对评论进行情感分析以及词云的绘制
- 审计工作存在的难点和问题_浅谈审计整改工作存在的困难及对策
- html2canvas黑背景,解决canvas转base64/jpeg时透明区域变成黑色背景的方法
- 线性代数——矩阵的秩
- 今天结束了ie被劫持的生活
- [Excel函数] SUM函数 | SUMIF函数 | SUMIFS函数
热门文章
- canvas学习(四):高级属性
- idea 快捷键修改去除 自动导入import 相关整理
- LSI SAS 3008配置操作
- Servlet编写登陆页面简单实践
- 对色情app渗透,我居然发现了 ....
- Win11这个界面你肯定没见过
- 突发!Log4j 爆“核弹级”漏洞,Flink、Kafka等至少十多个项目受影响,微博、京东、网易等大厂都发起应急响应...
- 小团队适合引入 Spring Cloud 微服务吗?
- Mybatis trim 标签的 2 个妙用!
- 10年Java老鸟忠告:技术人这4个错别再犯了!