首页 > 编程语言 >【7.0】Python面向对象之绑定方法与非绑定方法

【7.0】Python面向对象之绑定方法与非绑定方法

时间:2023-11-30 14:39:25浏览次数:45  
标签:__ Python self 绑定 host 7.0 MySQL 方法

【一】绑定方法与非绑定方法介绍

【1】绑定方法

  • 绑定给谁,谁来调用就自动将它本身当作第一个参数传入

(1)绑定到类的方法

  • 用classmethod装饰器装饰的方法。

  • 为类量身定制

  • 类.boud_method(),自动将类当作第一个参数传入

  • (其实对象也可调用,但仍将类当作第一个参数传入)

(2)绑定到对象的方法

  • 没有被任何装饰器装饰的方法

  • 为对象量身定制

  • 对象.boud_method(),自动将对象当作第一个参数传入

  • (属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)

【2】非绑定方法

  • 用staticmethod装饰器装饰的方法

  • 不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。

  • 就是一个普通工具而已

【3】小结

  • 与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值
  • 而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说

【二】绑定方法

【1】绑定给对象的方法(略)

【2】绑定给类的方法(classmethod)

  • classmehtod是给类用的,即绑定到类
  • 类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入)
  • python为我们内置了函数classmethod来把类中的函数定义成类方法
HOST = '127.0.0.1'
PORT = 3306


class MySQL:
    def __init__(self, host, port):
        self.host = host
        self.port = port

    @classmethod
    def from_conf(cls):
        print(cls)
        return cls(HOST, PORT)


# <bound method MySQL.from_conf of <class '__main__.MySQL'>>
print(MySQL.from_conf)
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 = host
        self.port = port

    @staticmethod
    # 就是一个普通工具
    def create_id():  
        m = hashlib.md5(str(time.time()).encode('utf-8'))
        return m.hexdigest()


# <function MySQL.create_id at 0x0000000001E6B9D8> 
# #查看结果为普通函数
print(MySQL.create_id)
conn = MySQL('127.0.0.1', 3306)

# <function MySQL.create_id at 0x00000000026FB9D8> 
# #查看结果为普通函数
print(conn.create_id)

【四】classmethod与staticmethod的区别

HOST = '127.0.0.1'
PORT = 3306


class MySQL:
    def __init__(self, host, port):
        self.host = host
        self.port = port

    @staticmethod
    def from_conf_static():
        return MySQL(HOST, PORT)

    # 哪个类来调用,就将哪个类当做第一个参数传入
    @classmethod
    def from_conf_class(cls):
        return cls(HOST, PORT)

    def __str__(self):
        return '就不告诉你'


class Mariadb(MySQL):
    def __str__(self):
        return '<%s:%s>' % (self.host, self.port)


m = Mariadb.from_conf_static()

# 我们的意图是想触发Mariadb.__str__,但是结果触发了MySQL.__str__的执行
print(m)
# 就不告诉你

【五】总结

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

标签:__,Python,self,绑定,host,7.0,MySQL,方法
From: https://www.cnblogs.com/dream-ze/p/17867255.html

相关文章

  • 【补】Python中关于OOP的常用术语
    【一】抽象与实现【1】抽象抽象是一种概念或思维工具,用于简化复杂的问题并将其分解为易于管理的部分。抽象可以帮助我们理解事物的本质和行为,同时也可以帮助我们在设计软件时更好地组织代码和数据结构。【2】实现实现则是对抽象的一种具体表达。它是对抽象的概念或模型进......
  • Spring源码学习之Web数据绑定器WebDataBinder
    WebDataBinder1.描述特殊的数据绑定器用于从web请求参数到JavaBean对象的数据绑定。专为web环境,但不依赖于ServletAPI;作为更具体的DataBinder变体的基类,例如ServletRequestDataBinder。2.注意:数据绑定会暴露对象图中不打算被外部客户端访问或修改的部分,从而导致安全问题。因......
  • [python] 基于Tablib库处理表格数据
    Tablib是一个用于处理电子表格(如Excel,CSV,JSON)的Python库。它提供了一种简单而强大的方式来操作和处理数据。利用Tablib,我们可以轻松地读取、写入、过滤和转换各种类型的电子表格数据。Tablib具有一致且易于使用的API,以在不同的数据格式之间进行无缝转换。比如,Tablib可以将数据......
  • Python爬取某电商平台商品数据及评论!
    前言随着互联网的发展,电商平台的出现让我们的消费更加便利,消费者可以在家里轻松地购买到各种商品。但有时候我们需要大量的商品数据进行分析,或者需要了解其他消费者的评价,这时候我们可以通过爬虫来获取数据。本文将介绍如何使用Python爬取某电商平台的商品数据及评论,并且用到代理ip......
  • Python学习之十二_tkinter的学习与使用
    Python学习之十二_tkinter的学习与使用摘要本来想说会用QT5进行界面编程但是发现比较繁琐还是先学习使用tkinter的方式进行界面化的编写和学习了基础知识tkinter是一个源码开放的图形用户接口开发工具,具备跨平台的特性Python默认的GUI开发模块是tkinter(在Python3以前的版本中......
  • Python中导入包和模块
    一、模块含义在前面的几个章节中我们基本上是用python解释器来编程,如果你从Python解释器退出再进入,那么你定义的所有的方法和变量就都消失了。为此Python提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。模块是一个包含所......
  • [python] 基于Tablib库处理表格数据
    Tablib是一个用于处理电子表格(如Excel,CSV,JSON)的Python库。它提供了一种简单而强大的方式来操作和处理数据。利用Tablib,我们可以轻松地读取、写入、过滤和转换各种类型的电子表格数据。Tablib具有一致且易于使用的API,以在不同的数据格式之间进行无缝转换。比如,Tablib可以将数据......
  • Python中命名空间及作用域
    一、命名空间命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过Python字典来实现的。命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。我们举一......
  • Python——第四章:内置函数(下)
    内置函数的使用方法:zip:可以把多个可迭代内容进行合并sorted:排序filter:筛选map:映射zip我们想把每个列表的第1位、第2位、第3位打包放在一起,手写的操作方法如下:#012lst1=["赵本山","范伟",'苏有朋']lst2=[40,38,42]lst3=["卖......
  • python的cv2模块使用
    一.安装CV2(opencv)模块pipinstallopencv-python二.使用imread读取图片使用函数cv2.imread(filepath,flags)读入一副图片filepath:要读入图片的完整路径flags:读入图片的标志cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道。alpha通道代表透明度效果,取值......