首页 > 其他分享 >27、绑定方法与非绑定方法

27、绑定方法与非绑定方法

时间:2022-08-18 13:34:11浏览次数:58  
标签:27 对象 self 绑定 MySQL 方法 id

27、绑定方法与非绑定方法

27、绑定方法与非绑定方法

 

 

目录:

  • 绑定方法与非绑定方法
  • 非绑定方法
  • 视频链接

 

一 绑定方法与非绑定方法

​ 类中定义的函数分为两大类:绑定方法和非绑定方法

​ 其中绑定方法又分为绑定到对象的对象方法和绑定到类的类方法。

​ 在类中正常定义的函数默认是绑定到对象的,而为某个函数加上装饰器@classmethod后,该函数就绑定到了类。

​ 我们在之前的章节中已经介绍过对象方法了,本节我们主要介绍类方法。类方法通常用来在__init__的基础上提供额外的初始化实例的方式

# 配置文件settings.py的内容
HOST='127.0.0.1'
PORT=3306

# 类方法的应用
import settings
class MySQL:
    def __init__(self,host,port):
        self.host=host
        self.port=port
    @classmethod
    def from_conf(cls): # 从配置文件中读取配置进行初始化
        return cls(settings.HOST,settings.PORT)

>>> MySQL.from_conf # 绑定到类的方法
<bound method MySQL.from_conf of <class ‘__main__.MySQL'>>
>>> conn=MySQL.from_conf() # 调用类方法,自动将类MySQL当作第一个参数传给cls

绑定到类的方法就是专门给类用的,但其实对象也可以调用,只不过自动传入的第一个参数仍然是类,也就是说这种调用是没有意义的,并且容易引起混淆,这也是Python的对象系统与其他面向对象语言对象系统的区别之一,比如Smalltalk和Ruby中,绑定到类的方法与绑定到对象的方法是严格区分开的。

二 非绑定方法

为类中某个函数加上装饰器@staticmethod后,该函数就变成了非绑定方法,也称为静态方法。该方法不与类或对象绑定,类与对象都可以来调用它,但它就是一个普通函数而已,因而没有自动传值那么一说

import uuid
class MySQL:
    def __init__(self,host,port):
        self.id=self.create_id()
        self.host=host
        self.port=port
    @staticmethod
    def create_id():
        return uuid.uuid1()

>>> conn=MySQL(‘127.0.0.1',3306)
>>> print(conn.id) #100365f6-8ae0-11e7-a51e-0088653ea1ec

# 类或对象来调用create_id发现都是普通函数,而非绑定到谁的方法
>>> MySQL.create_id
<function MySQL.create_id at 0x1025c16a8>
>>> conn.create_id
<function MySQL.create_id at 0x1025c16a8>

总结绑定方法与非绑定方法的使用:若类中需要一个功能,该功能的实现代码中需要引用对象则将其定义成对象方法、需要引用类则将其定义成类方法、无需引用类或对象则将其定义成静态方法。

视频链接:

 

 

标签:27,对象,self,绑定,MySQL,方法,id
From: https://www.cnblogs.com/leeyong49/p/16598390.html

相关文章

  • 28、反射、内置方法
    28、反射、内置方法  目录:反射内置方法视频链接 一反射 python是动态语言,而反射(reflection)机制被视为动态语言的关键。反射机制指的是在......
  • 迭代器Iterator的使用方法(Java)
    迭代器是一种经典的设计模式。用于在不需要暴漏数据是如何保存在数据结构中的细节的情况下,遍历一个数据结构。Collection接口继承自Iterable接口。所以说,实现了Collectio......
  • 神经网络权重初始化方法He、Xavier初始化
     He初始化是何凯明等提出的一种鲁棒的神经网络参数初始化方法,动机同Xaviar初始化基本一致,都是为了保证信息在前向传播和反向传播过程中能够有效流动,使不同层的输入信号的......
  • ZYNQ系列VITIS不支持JTAG模式的核心板烧录方法
    2-1:系统环境变量修改    对于ZYNQ或者MPSOC下载QSPI程序需要用到2个文件    Boot.bin文件:改文件由fsbl.elf文件、fpga.bit文件、应用程序.elf文件合成  ......
  • vue 针对多端口的情况下文件上传处理方法
    在一个项目中,可能会存在多个端口号,因为不同的业务作为区分,需要多个端口号:解决方案,·1.在特定的端口号中api接口中进行加入特定的字符2.针对api的形式,使用form......
  • 离线(无网)安装、运行arthas工具的方法
    如何在没有网的主机或者容器中,安装arthas工具? 之前的arthas,在启动的时候,都要下载一些依赖的库,必须要联网。现在,使用最新的全的arthas的包,就解决了这个问题。 接下来......
  • layui数据表格的渲染方式--方法渲染
    layui数据表格的方法渲染html代码<tableclass="layui-table"id="test"lay-filter="test"></table> js代码<scripttype="text/javascript">......
  • 工具模板 | 用APOEM方法消除对用户行为的偏见
    如何降低人们的偏见,观察并记录真实的用户行为?首先需要大家每个人从多个维度去观察,只对事实进行记录,互相不批评、不评论、不议论。在这篇文章中,我们来介绍一个具体的消除......
  • 模板方法模式
    1.定义定义了一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。2.类图  3.例子父类定义了......
  • SQL Server遍历表的几种方法
    在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易懂,但是它不符合面向集合操作的原则,而且性能也比面向......