Python学习:绑定方法与非绑定方法

一、绑定方法与非绑定方法

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

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

在类中正常定义的函数默认是绑定到对象的,而为某个函数加上装饰器@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
# Python学习交流群:711312441
# 类或对象来调用create_id发现都是普通函数,而非绑定到谁的方法
>>> MySQL.create_id
<function MySQL.create_id at 0x1025c16a8>
>>> conn.create_id
<function MySQL.create_id at 0x1025c16a8>

总结

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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python学习:绑定方法与非绑定方法 - Python技术站

(0)
上一篇 2023年4月2日 下午4:52
下一篇 2023年4月2日

相关文章

  • Python模块学习,模块是,什么

    模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。 模块名要遵循Python变量命名规范,不要使用中文、特殊字符 先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块 一、import语句 import moudle_name :导入指…

    Python开发 2023年4月2日
    00
  • Python学习:基础练习题

    1.输出0到100的数字,如果数字是3的倍数输出Fizz,5的倍数输出Buzz。 同时是3和5的倍数输出FizzBuzz,其他情况则打印原数字 for i in range(100): if i==0: print(i) elif i%3==0 and i%5==0: print(“FizzBuzz”) elif i%3==0: print(“Fizz”) …

    Python开发 2023年4月2日
    00
  • Python中的交互库-os库

    一.介绍 os库是与操作系统相关的库,它提供了通用的基本的操作系统交互功能。os库是Python的标准库之一,它里面包含几百个处理函数,能够处理与操作系统相关的功能,包括路径操作、进程管理、环境参数设置等几类功能。其中路径操作是利用os.path子库,它用于处理文件以及目录的路径,并获得相关的信息;进程管理指启动系统中的其它程序的功能;环境参数指获得系统软硬…

    python 2023年5月10日
    00
  • python学习:三目运算符

    一、三目运算符的基本语法 不同语言的三目运算符的基本语法存在差异,以C语言和Python语言为例。 1、通常一般语言如C语言的语言格式如下: 判断条件(返回布尔值) ? 为真时的结果 :为假时的结果 实例: #include<stdio.h> int main(void) { int x=2; x = x%2==0 ? x+1 : x; prin…

    Python开发 2023年4月2日
    00
  • Python3教程:加密模块-hashlib

    一、哈希 1. 什么是可哈希(hashable) 简要的说,可哈希的数据类型,即不可变的数据结构(字符串str、元组tuple、对象集objects)。 2. 哈希有什么作用 它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间复杂度下查询它,所以,哈希对高效的算法和数据结构很重要。 3. 什么是不可哈希(unhash…

    Python开发 2023年4月2日
    00
  • python中shutil和shutil库的用法

    一、shutil目录和文件操作 Python shutil库提供了对文件和目录复制、移动、删除、压缩、解压等操作。 1. 复制文件或目录 shutil.copy(src, dst):复制文件或目录 shutil.copyfile(src, dst):复制文件,src和dst只能是文件 shutil.copytree(src, dst, dirs_exist_…

    python 2023年4月18日
    00
  • Python教程:OS与sys模块用法教程

    一、Python os模块 包含普遍的操作系统功能,如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。 1、os.access() 查看文件是否有指定权限,有则返回True否则返回flase os.access(path, mode) path:指定文件路径 mode:参数有F_OK(是否存在),R_OK(可读),W_OK(可写),X_OK(可执行…

    Python开发 2023年3月31日
    00
  • Python学习:配置日志的几种方式

    作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数;2)创建一个日志配置文件,然后使用fileConfig()函数来读取该文件的内容;3)创建一个包含配置信息的dict,然后把它传递个dictConfig()函数; 需要说明的是,log…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部