一、类中定义的函数分成两大类

1:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入):

  1. 绑定到类的方法:用classmethod装饰器装饰的方法。

         为类量身定制类.boud_method(),自动将类当作第一个参数传入(其实对象也可调用,但仍将类当作第一个参数传入)

  2. 绑定到对象的方法:没有被任何装饰器装饰的方法。

        为对象量身定制对象.boud_method(),自动将对象当作第一个参数传入(属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)

2、:非绑定方法:用staticmethod装饰器装饰的方法

  1. 不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已

注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而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

面向对象【林老师版】:绑定方法与非绑定方法(十七)相关推荐

  1. Day20:绑定方法与非绑定办法、多态和多态性

    一.绑定方法与非绑定方法 类中定义的函数分成两大类: 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定 ...

  2. Python基础教程:绑定方法和非绑定详细用法

    绑定和方法调用 1.首先,方法仅仅是类内部定义的函数.(这意味着方法是类属性而不是实例属性) 2.其次,方法只有在其所属的类拥有实例时,才能被调用.当存在一个实例时,方法才被认为是绑定到那个实例了.没 ...

  3. python:绑定方法和非绑定方法

    类中定义的方法大致可以分为两类:绑定方法和非绑定方法.其中绑定方法又可以分为绑定到对象的方法和绑定到类的方法. 一.绑定方法 1.1 对象的绑定方法 在类中没有被任何装饰器修饰的方法就是 绑定到对象的 ...

  4. 绑定方法和非绑定方法

    绑定方法 绑定方法:绑定给谁就是给谁用 绑定到对象的方法:凡是在类中定义的函数(没有被任何装饰器修饰),都是绑定给对象用的:特点:obj.bar()自动把obj当作第一个参数传入. 绑定到类的方法:在 ...

  5. 全面解析python类的绑定方法与非绑定方法(转载+自己的消化与理解)

    参考链接来自: https://www.cnblogs.com/vipchenwei/p/7126772.html#_label1 先说下,这篇文章中,其实有这么个事情: 也就是,该文章有的函数后面没 ...

  6. python_day7 绑定方法与非绑定方法

    在类中定义函数如果 不加装饰器 则默认 为对象作为绑定方法 如果增加 classmethod 是 以 类 作为绑定方法 增加 classmethod 是 非绑定方法,就是不将函数 绑定 ####### ...

  7. Day7 子类调用父类的方法supper 绑定方法与非绑定方法

    supper:可以利用supper来重用父类的方法,可以不用指名道姓的调用了. 1 class OldboyPeople: 2 school = 'oldboy' 3 def __init__(sel ...

  8. python123怎么绑定慕课_python学习30——绑定方法与非绑定方法

    一 绑定方法与非绑定方法 ​ 类中定义的函数分为两大类:绑定方法和非绑定方法 ​ 其中绑定方法又分为绑定到对象的对象方法和绑定到类的类方法. ​ 在类中正常定义的函数默认是绑定到对象的,而为某个函数加 ...

  9. static方法与非static方法是否可以互相调用

    情况一.static方法调用非static方法 非静态方法只有实例对象才可调用,而静态方法随着类的加载而加载,类的加载在实例对象产生之前,所以静态方法不能调用非静态方法 情况二.非atic方法调用st ...

  10. salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)

    在salesforce的classic中,我们使用{!expresion}在前台页面展示信息,在lightning中,上一篇我们也提及了,如果展示attribute的值,可以使用{!v.expresi ...

最新文章

  1. restore还原不同名称的数据库_SQL Server2005还原数据库攻略
  2. 【pmcaff专栏】项目管理失败?如何避免?
  3. Dubbo启动,调用方法失败【问题:调用超时】
  4. 无线路由器和计算机怎么连接网络连接,华为无线路由器怎么连接宽带上网
  5. 小车手app安卓版下载_古筝大师app下载-古筝大师下载v2.1.2 安卓版
  6. 2019-06-13 Java学习日记之MySql
  7. 7-36 社交网络图中结点的“重要性”计算 (30 分)(思路加详解)兄弟们PTA乙级题目冲起来
  8. 【leetcode 简单】 第八十四题 两个数组的交集
  9. 杨澜对话华为周跃峰:发展数字经济,存储技术是关键
  10. opencv+Dlib python大眼代码
  11. php 获取某周的最后一天,PHP获取本周首先天和最后一天
  12. 写学术论文的一些感想
  13. 【真人手势动画制作软件】万彩手影大师教程 | 预览、保存及发布视频
  14. Windows95 程序设计指南(Windows 95 A Developer's Guside)
  15. 爬取微博评论并存入MySQL,并对评论进行情感分析以及词云的绘制
  16. 审计工作存在的难点和问题_浅谈审计整改工作存在的困难及对策
  17. html2canvas黑背景,解决canvas转base64/jpeg时透明区域变成黑色背景的方法
  18. 线性代数——矩阵的秩
  19. 今天结束了ie被劫持的生活
  20. [Excel函数] SUM函数 | SUMIF函数 | SUMIFS函数

热门文章

  1. canvas学习(四):高级属性
  2. idea 快捷键修改去除 自动导入import 相关整理
  3. LSI SAS 3008配置操作
  4. Servlet编写登陆页面简单实践
  5. 对色情app渗透,我居然发现了 ....
  6. Win11这个界面你肯定没见过
  7. 突发!Log4j 爆“核弹级”漏洞,Flink、Kafka等至少十多个项目受影响,微博、京东、网易等大厂都发起应急响应...
  8. 小团队适合引入 Spring Cloud 微服务吗?
  9. Mybatis trim 标签的 2 个妙用!
  10. 10年Java老鸟忠告:技术人这4个错别再犯了!