python入门开发学习笔记之绑定方法与非绑定方法

python基础:类的绑定方法与非绑定方法(详解) 这篇文章主要介绍了Python类的绑定方法和非绑定方法实例解析,文中通过示例代码介绍的非常详细,希望对大家有帮助! 阅读详情

本节重点

  • 掌握封装,封装与扩展性
  • 掌握property

本节时长需控制在15分钟内

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

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

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

     为类量身定制

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

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

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

    为对象量身定制

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

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

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

不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已
注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而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=host
        self.port=port

    @classmethod
    def 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=host
        self.port=port
    @staticmethod
    def 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=host
        self.port=port

    @staticmethod
    def 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__的执行,打印就不告诉你:

练习

练习1:定义MySQL类

要求:

1.对象有id、host、port三个属性

2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一

3.提供两种实例化方式,方式一:用户传入host和port 方式二:从配置文件中读取host和port进行实例化

4.为对象定制方法,save和get_obj_by_id,save能自动将对象序列化到文件中,文件路径为配置文件中DB_PATH,文件名为id号,保存之前验证对象是否已经存在,若存在则抛出异常,;get_obj_by_id方法用来从文件中反序列化出对象

MySQL Connector/Python:数据库交互与操作指南 MySQL Connector/Python 是一个为MySQL数据库提供原生Python编程语言接口的驱动程序。它是完全用Python编写的,不依赖于MySQL C客户端库,这意味着它可以在各种平台上运行,包括Linux、Windows、Mac OS X以及其他支持Python的系统。原子性(Atomicity):事务中进行的所有操作要么全部完成,要么完全不执行,不会停留在中间状态。一致性(Consistency) 阅读详情

相关推荐

操作系统课程项目 OS project —— Pintos from Project 1 to Project 3

Pintos Project 陪伴我们操作系统课程大半个学期了…… 虽然做了这么长时间,个人能力有限,pintos代码,看过的可能也就看懂了一半吧,更不用说没看过的了…… 但是也找到了一些有价值的资料,整理一下,供后辈们参考…… 关于环境的问题,最好是用ubuntu 16.04 windows用户不要折腾装双系统了,特别是win10,动不动更新一下,说不定双系统就出问题了,linux...

Deserted Land 8554

Python:类(class)静态方法(staticmethod)和类方法(classmethod)

当定义类时,有两种特殊类型的方法:静态方法(staticmethod)和类方法(classmethod)。它们可以在类中定义,与实例化的对象无关。

weixin_42046845的博客 2322

CAN通信:EB中配置CAN驱动,配置参数解析

以S32K314芯片说明,其他芯片不同,参数配置也有差异。

zhangxiaio1的博客 2168

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

【一】绑定方法与非绑定方法介绍 【1】绑定方法 绑定给谁,谁来调用就自动将它本身当作第一个参数传入 (1)绑定到类的方法 用classmethod装饰器装饰的方法。 为类量身定制 类.boud_method(),自动将类当作第一个参数传入 (其实对象也可调用,但仍将类当作第一个参数传入) (2)绑定到对象的方法 没有被任何装饰器装饰的方法 为对象量身定制 对象...

Chimengmeng的博客 513

信捷XDH PLC多轴运动控制实战:Ethercat总线下的C语言封装技巧

本文深入探讨了在信捷XDH PLC平台上,如何利用C语言对EtherCAT总线多轴运动控制进行高效封装。通过设计全局数据池、模块化状态机及用户友好接口,将底层复杂的运动控制函数库抽象为清晰、可复用的高级模块,显著提升程序稳定性与可维护性,并分享了关键的实战避坑经验。

weixin_29188043的博客 160

k8s部署 普罗米修斯(Prometheus)监控

Prometheus是一个开源的服务监控系统和时序数据库其提供了通用的数据模型和快捷数据采集、存储和查询接口它的核心组件Prometheus服务器定期从静态配置的监控目标或者基于服务发现自动配置的目标中进行拉 取数据新拉取到啊的 数据大于配置的内存缓存区时,数据就会持久化到存储设备当中。

D2961953033的博客 3855

Python面向对象编程——绑定方法与非绑定方法

Python面向对象编程——绑定方法与非绑定方法 一、类中定义的函数分成两大类 1、绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入 1)绑定到类的方法:用classmethod装饰器装饰的方法。 为类量身定制 类.boud_method(),自动将类当作第一个参数传入 (其实对象也可调用,但仍将类当作第一个参数传入) 2)绑定到对象的方法:没有...

257

Allegro 给元器件PCB封装库添加3D模型详细步骤

从上面视图可以看到模型跟PCB 库的方向是对了,但是位置偏下,且在PCB封装库后面,我们下面需要做的就是把模型往上移、往前移。首先将元器件3D模型文件放在封装库的目录下(也可以单独新建一个模型库文件夹),注意3D文件必须是Step格式。Transparent: 选择透视的对象,可以是模型、也可以是PCB封装,或者两种都透视。在左边搜索要添加的3D模型的文件(注意是在* 星号前面输入文件名),按回车即可找到。同样的,接下来需要往Y 负方向移,即左移,一边调整一边观察视图。

sinat_15677011的博客 3682

【python进阶】描述符协议介绍和应用(@property、静态方法、类方法)

描述符(Descriptor)是一种用于管理对象属性访问的特殊协议。描述符对象需要实现特定的方法,这些方法在属性访问时被自动调用。在3.2的代码里面其实是存在一个问题,就是属性硬编码问题,就是在描述符的__get__和__set__方法中,对实例化的属性获取是硬编码。其实,当一个类使用多个描述符,这个类可以告诉每个描述符是给哪个变量使用。

weixin_40476683的博客 1154

OsgEarth —— 笔记1 - 创建地球的earth文件

效果         正文      1、准备一张全球的渲染图(tif格式)、一张全球的高程图(tif格式)        2、创建并编写.earth文件           在步骤1目录下创建china-simple.earth,并将如下内容写入。 <map name="Globe" type="geocentric" version="2"> <!-- 全球影像图 --> <image name="GlobeImage" driver="gdal"> &l

7681

从 ST22 到根因定位:ABAP Dumps 全景排查指南(含典型 Dump 案例、修复套路与云时代实践)

本文系统介绍了SAP系统中ABAP短转储(Dump)的分析方法。首先指出短转储是程序运行时无法处理的错误导致系统强制终止执行。文章详细解析了短转储报告各区块的作用:从概述性的Short Text和What happened,到核心的Error Analysis和Source Code Extract,再到关键的系统字段Contents of system fields和调用栈Active Calls/Events。针对不同场景提供了排查建议:客户代码应建立可控边界,标准对象优先查阅SAP Notes。最后推

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 485

Python 之绑定方法与非绑定方法的基本使用及原理(64)

绑定方法是与特定对象或类绑定的方法。当调用绑定方法时,Python 会自动将对象或类作为第一个参数传递给方法。根据绑定的对象不同,绑定方法可分为实例绑定方法和类绑定方法。非绑定方法是不与特定对象或类绑定的方法。调用非绑定方法时,不会自动传递对象或类作为第一个参数,需要手动提供所需的参数。Python 中的绑定方法(实例绑定方法、类绑定方法)和非绑定方法(静态方法)在面向对象编程中具有不同的作用和特点。实例绑定方法与实例对象绑定,用于操作实例的属性和实现实例的行为;

Android开发领域创作者 1030

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Python教程:绑定方法与非绑定方法

class People:def init(self,name,age):self.name = nameself.age = agedef talk(self):passp = People(‘xiaohua’,18)print(p.talk)‘’’输出结果:‘’’从上面的输出结果来看,talk()这个类的方法,是绑定给对象使用的。下面,我在看看另外一种情况。cl

2401_83703951的博客 1039

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

[Python学习日记-68] 绑定方法与非绑定方法

在之前我们学习类与对象的属性查找与绑定方法的时候就接触过绑定方法了,不过当时是简单的介绍了针对于对象的绑定方法,其实在类内部定义的函数分为两大类:绑定方法(类方法)和非绑定方法(静态方法),下面我们来展开介绍一下。

JovaZou的成长之路 1298

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python学习笔记-python中的绑定方法与非绑定方法

本文目录一:绑定方法:其特点是调用方本身自动作为第一个参数传入二:非绑定方法,静态方法 一:绑定方法:其特点是调用方本身自动作为第一个参数传入 1.绑定到对象的方法:调用方是一个对象,该对象自动传入 2.方法绑定到类:调用方是类,类自动传入 import settings_A class 后台数据库: def __init__(self,ip,port): self.ip=ip self.port=port def 基本功能(self):

优快云XXCQ的博客 2098

【搬家】【Python】Python 中类的绑定方法与非绑定方法释疑

a

太午的作业本 1794

Python教程:绑定方法与非绑定方法,神操作

从上面输出结果来看,当类调用类中的方法时候,是不会进行自动传值的,也就是说,函数有几个参数,我们就得传递进去几个参数。如果想结果正常运行,那么在类名调用talk()的时候,将参数一一都传递进去。即:这个参数可以是任意的,但是,必须传递进去。而,当对象调用类中方法时候,则不用传递,如上面的2正常执行。‘’’遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!‘’’defpass。

2401_83977626的博客 998

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

类中定义的方法大致可以分为两类:绑定方法和非绑定方法。其中绑定方法又可以分为绑定到对象的方法和绑定到类的方法。 一、绑定方法 1.1 对象的绑定方法 在类中没有被任何装饰器修饰的方法就是 绑定到对象的方法,这类方法专门为对象定制。 class Person: country = "China" def __init__(self, name, age): self.name = name self.age = age def speak(sel

Python热爱者的博客 477

python基础(二十五):多态性与鸭子类型、绑定方法与非绑定方法

文章目录一、多态性二、鸭子类型三、绑定方法1、问题引入2、绑定给类的方法四、非绑定方法 一、多态性 多态指的是一类事物有多种形态,比如动物有多种形态:猫、狗、猪 class Animal: # 同一类事物:动物 def talk(self): pass class Cat(Animal): # 动物的形态之一:猫 def talk(self): # 重写父类talk方法 print('喵喵喵') class Dog(Animal): # 动物的形态之二:狗

一点一滴铺就人生 2788

python123如何绑定慕课_Python3.7之绑定方法与非绑定方法

一、绑定方法1.对象的绑定方法首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的。下面,我们通过实例,来慢慢解析绑定方法的应用。class People:def __init__(self,name,age):self.name = nameself.age = agedef talk(self):passp = People('xiaohua',18)print(p.t...

weixin_39855796的博客 781

最新Python教程:绑定方法与非绑定方法

从上面的输出结果来看,talk()这个类的方法,是绑定给对象使用的。下面,我在看看另外一种情况。defpass‘’’输出结果:‘’’现在,我们将talk()函数的参数去掉,结果显示与上面是一样。这说明,不管是类中的方法,还是类中函数,默认情况下都是绑定给对象使用的。绑定给对象使用有一种好处,那就是不用手动将对象传入。对象是自动传到类中。‘’’遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939。

2301_82243558的博客 788

python 类的绑定方法和非绑定方法

一、绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的。下面,我们通过实例,来慢慢解析绑定方法的应用。 class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): pass p = People('xiaohua',18) print(p.talk) 输出结

Python热爱者的博客 467

Python绑定方法的用法介绍

Python绑定方法的用法介绍

PlutoZuo的博客 462
上一篇: python入门开发学习笔记封装
下一篇: python入门开发学习笔记之内置方法
程序员_大白
博客等级 码龄5年 1万+粉丝 4001原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值