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

绑定方法与非绑定方法

时间:2023-05-07 21:11:29浏览次数:50  
标签:对象 self 绑定 与非 MySQL 方法 id

绑定方法与非绑定方法

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

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

在类中正常定义的函数默认是绑定到对象的,而为某个函数加上装饰器@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>
 

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

标签:对象,self,绑定,与非,MySQL,方法,id
From: https://www.cnblogs.com/ycmyay/p/17380164.html

相关文章

  • 反射与内置方法
    反射在Python中,反射指的是通过字符串来操作对象的属性,涉及到四个内置函数的使用(Python中一切皆对象,类和对象都可以用下述四个方法)classTeacher:def__init__(self,full_name):self.full_name=full_namet=Teacher('jasonLin')#hasattr(object,'name')ha......
  • 数据类型及常用方法
    引入我们学习变量是为了让计算机能够像人一样去记忆事物的某种状态,而变量的值就是用来存储事物状态的,很明显事物的状态分成不同种类的(比如人的年龄,身高,职位,工资等等),所以变量值也应该有不同的类型,例如salary=3.1#用浮点型去记录薪资age=18#用整型去记录年龄name='lil......
  • 挂载NTFS分区,离线安装NTFS-3G(Linux挂载NTFS格式磁盘的方法)
    挂载NTFS分区,离线安装NTFS-3G(Linux挂载NTFS格式磁盘的方法)本文档环境为centos7.9版本目录挂载NTFS分区,离线安装NTFS-3G(Linux挂载NTFS格式磁盘的方法)一、NTFS-3G说明二、在线安装(有网络环境)三、离线安装(无网络环境)1单独下载软件包(gcc、ntfs-3g)2将下载的软件包传输目标虚拟机(......
  • 在访问UserController控制器下的connonParam方法的时候无法访问,报404
    在访问UserController控制器下的connonParam方法的时候无法访问,报404服务已经起来了  但是访问还是失败了找不到资源 springmvc配置类也配好了路径,最后发现是 ServletContainersInitConfig的getServletMappings()方法没有设置交由springmvc的拦截请求,修改! ......
  • element中表格的另一种显示方法
    正常(默认展示该数据的相关属性值):      <el-table-column       prop="name"       label="姓名"       width="180"      ></el-table-column>转换法(去掉prop属性,改为用值判断显示内容):     ......
  • 微信小程序在wxml里不支持includes,indexOf,findIndex等方法
    小程序的wxml文件内不支持数组的includes,indexOf,findIndex等方法。不是垃圾是什么?玩什么标新立异?不会搞就别TM搞。 开发者:我想上二楼。WX:这里有一坨屎,吃子它,就让你上二楼。开发者:@#$%&@^$*^&*&^$%$^ 咋做?在任意目录创建一个.wxs文件,里面写上如下代码:文件-/utils/wuti......
  • Pandas内置函数方法
    1.导入数据:pd.read_csv(filename):从CSV文件导入数据pd.read_table(filename):从限定分隔符的文本文件导入数据pd.read_excel(filename):从Excel文件导入数据pd.read_sql(query,connection_object):从SQL表/库导入数据pd.read_json(json_string):从JSON格式的字符......
  • Windows下SYSTEM权限文件夹的删除方法
    (不一定对所有情况都能用..。但是目前发现比较简单有效...)以C:/Windows.old文件夹为例,一般来说都无法完全删除,到最后总会提示需要SYSTEM权限。怎么办呢,下载一个VSCode,然后用VSCode打开Windows.old文件夹,便可采用VSCode将该文件夹下的所有内容删除干净...(我也不知道原理,但是属......
  • MultiDex使用方法及由此导致的crash、ANR问题解决方案
    Android开发的朋友,如果是在开发一款中大型应用时,都会碰到这么一个问题,就是dex分拆问题,google给出的解决方案MultiDex。现象:有些APP本身功能比较多,再加上一些其它三方的SDK,慢慢的发现dex越来越大,直到有一天编译出现如下错误:Error:Thenumberofmethodreferencesina.dexfile......
  • Ubuntu sudo不用输入密码的方法
    在启动时进入安全模式,这时是用root登录的,执行:chmod740/etc/sudoers然后打开/etc/sudoers这个文件,把最后一行:#UserprivilegespecificationrootALL=(ALL:ALL)ALL#Allowmembersofgroupsudotoexecuteanycommand%sudoALL=(ALL:ALL)ALL改为 #Use......