当前位置: 首页 > news >正文

Python进阶-----面对对象6.0(绑定方法[类方法、静态方法]与内置方法)

 

目录

前言:

1.绑定方法

(1)实例方法

(2)类方法

 (3)静态方法

2.类型检测

(1)issubclass() 函数

(2)isinstance() 函数

3.内置方法(魔法方法)

(1)信息格式化(__str__())

(2)析构方法(__del__())

(3)空间分配(__new__())


前言:

        前面已经学习了Python中的三大特征:封装、继承、多态。核心内容基本上也说完了,那今天这一期主要是讲讲Python中一些语法方法,包括绑定方法(示例方法,类方法,静态方法)和内置方法,好了废话不多说,上正题。

1.绑定方法

(1)实例方法

前面我们已经讲过了实例方法,也就是在类里面定义方法的时候会带有一个self实例参数,当我们去使用实例方法的时候,实例参数会传入给self进行调用,然后去实现相关功能

class A(object):def __init__(self,name,age):self.name=nameself.__age=agedef fun(self): #定义的实例方法return self.__age
user=A('小敏',18)
print(user.fun())
#输出结果:18

实例方法前面已经讲过了,这里就不多说了

(2)类方法

概念

类方法:顾名思义就是通过类去调用的方法, 用装饰器@classmethod进行装饰,类方法可以类在多次实例化后有个记忆的功能。类方法操作的是类属性,因为类方法无法通过self去查找对象的实例属性

当我们去通过装饰器@classmethod 去装饰一个方法的时候,这个方法就会被定义为类方法,然后会自动带有cls参数,这个参数就是类参数 

 调用规则:

类方法的调用不一定需要实例化对象才可以调用,可以通过类去直接使用:类.类方法()  ,当然也可以去通过实例对象去调用都是没问题的

 看个例子:

class B(object):def __init__(self,name):self.name=name@classmethoddef fun(cls):print('这是一个类方法')
B.fun()
#输出结果:这是一个类方法
user=B('jk')
user.fun()
#输出结果:这是一个类方法

这里我们可以看到,当去调用类方法的时候不需要实例化对象就可以去调用(实例化对象也可以调用) 

 再看个例子,类方法虽然不可以操作实例属性,但是可以去操作类属性的:

class A(object):count=0 #定义的类属性def __init__(self,name):self.name=nameA.classway() #调用类方法self.fun()@classmethoddef classway(cls):cls.count+=1 #类方法可以去操作类属性,但是不能操作实例属性(self)#统计次数def fun(self):print(f'调用了第{self.count}次')
for i in range(4):t=A('jb')
#输出结果:
# 调用了第1次
# 调用了第2次
# 调用了第3次
# 调用了第4次

注意:

  • 类无法调用实例方法

  • 实例对象可以调用类方法

  • 区别在于:类方法不用实例化对象,只用类就可以调用

 总的来说就是实例对象既可以调用实例方法/实例属性,也可以调用类方法/属性;而类对象只能调用类方法/类属性,不能调用实例方法/属性

 (3)静态方法

概念:

静态方法:通过装饰器@staticmethod进行修饰,没有cls,self参数,没有任何绑定

 性质和作用

  • 静态方法就是相当于定义在类外面的函数,只是为了方便管理常用的方法(函数),放在类中,统一管理

  • 静态方法 不访问类成员(类方法,类属性),实例成员(实例属性,实例方法)

  • 用于:定义常用的工具函数

class Student(object):def __init__(self,name,age):self.name=nameself.age=agedef fun(self):print('学生')
def study():print('学习知识')
dick=Student('dick',18)
dick.study=study
dick.study()
#输出:学习知识

通过上面这个示例,我们很容易看出study() 这个方法是在外部添加给实例对象dick,其实这就是静态方法的实质,区别不同的是静态方法是放到类对象的内部的。

示例:静态方法的定义

import time
class Student(object):def __init__(self,name,age):self.name=nameself.age=agedef fun(self):print('学生')@staticmethoddef study():print(time.asctime(time.localtime()),'dk刷了一道题')
dick=Student('dick',18)
dick.study()
#输出:Sat Mar  4 20:22:01 2023 dk刷了一道题
Student.study()
#输出:Sat Mar  4 20:22:26 2023 dk刷了一道题

注意:

静态方法是不绑定类对象(cls)和实例对象(self)的,所以既可以通过实例对象去调用,也可以通过类对象去调用

2.类型检测

在此之前我们学过了以类型检测的方法type() 函数,这个函数可以检测变量类型的

a=15
b=False
print(type(a),type(b))
#输出结果:<class 'int'> <class 'bool'>

(1)issubclass() 函数

语法格式:issubclass(son,dad……)

参数说明:son 是表示子类,dad是表示父类,父类可以是多个(多继承)

作用:这个函数可以检测子类(son)与父类(dad)是否有继承关系,返回布尔变量(True,False)

class A(object):pass
class B(A):pass
print(issubclass(B,A))
#输出结果:True

(2)isinstance() 函数

语法格式:isinstance(obj, cls)

参数说明:obj 是表示实例化对象,cls是表示类对象,

作用:判断一个实例化对象是不是由某一个类对象而来的

class A(object):pass
a=A()
print(isinstance(a,A))
#输出结果:True

3.内置方法(魔法方法)

 我们可以去通过dir() 直接查找一个类具有的方法,所以我们直接dir(object)去查看类中的内置方法

print(dir(object))
# ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
#  '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
#  '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

(1)信息格式化(__str__())

在一般情况下,我们输出一个实例对象,结果是这个对象的地址,其实这个是一个类对象对实例对象默认的描述,但是我们也可以去通过类中的内置方法去修改实例对象的描述

方法:

__str__() 该方法用户可以直接通过打印对象名字来获取对象的自定义描述,而不是对应的内存地址

__repr__()该方法是返回对象的自定义描述,是在交互模式下进行使用

返回值:字符串(只能是字符串)

对比两个示例: 

class A(object):def __init__(self,name):self.name=name
a=A('dick')
print(a)
#输出结果:<__main__.A object at 0x00000224910E17C0>
class A(object):def __init__(self,name):self.name=namedef __str__(self):return '我是dick'
a=A('dick')
print(a)
#输出结果:我是dick

注意如果__str__()与__repr__() 同时出现的时候,类的描述返回值是选择执行__str__()的,因为__repr__()一般是在交互模式下所以的,脚本模式优先使用__str__()方法

class A(object):def __init__(self,name):self.name=namedef __str__(self):return 'str方法'def __repr__(self):return 'repe方法'
a=A('dick')
print(a)
#输出结果:str方法

(2)析构方法(__del__())

__del__() 当检测到对象要被删掉时,就会触发它 ,然后执行这个方法的内容(比如说玩王者荣耀时,英雄阵亡时会触发阵亡语句)

示例:

class Daji(object):def __init__(self):self.name='妲己'def __del__(self): #检测实例对象是否被删除print('被玩坏了') #如果实例对象被删除了,就执行
hero=Daji()
del hero
# 输出结果:被玩坏了

(3)空间分配(__new__())

        当我们去创建一个新的对象的时候,要对这个对象进行空间分配,前面我们讲过object类是所有类中的父类(众神之父),都继承与object类,其中object类是有一个__new__() 方法的,当我们给类对象分配空间的时候会触发__new__()方法,然后得到一个实例化的引索值(实例对象),最后通过__init__() 方法对这个引索值初始化,所有当我们去创建一个实例的时候会执行__new__() 和__init__()方法

 所有类都是继承object类,当我们对一个新的类进行def 方法写入,其实都是重写object类

__new__ (cls)

作用:内置的静态类方法,主要是给实例对象分配内存空间

 例子:

class A(object):#继承object类def __new__(cls, *args, **kwargs): #重写new方法print('new function')res=object.__new__(cls)return res #返回分配好对象的空间def __init__(self,name): #会把new方法返回的对象传入到self,然后初始化print('初始化方法')self.name=name
a=A('dick')
print(a.name)
#输出结果:
# new function
# 初始化方法
# dick

好了,这一期就先到这里了,我们下一期再见~~~

下一期会进一步详细讲解new方法和init方法

分享一张壁纸:

 

相关文章:

Python进阶-----面对对象6.0(绑定方法[类方法、静态方法]与内置方法)

目录 前言&#xff1a; 1.绑定方法 &#xff08;1&#xff09;实例方法 &#xff08;2&#xff09;类方法 &#xff08;3&#xff09;静态方法 2.类型检测 &#xff08;1&#xff09;issubclass() 函数 &#xff08;2&#xff09;isinstance() 函数 3.内置方法&#xf…...

java8四大基本函数式接口

1.什么是函数式接口? 只包含一个抽象方法的接口&#xff0c;称为函数式接口你可以通过Lambda表达式来创建该接口的对象。&#xff08;若Lambda表达式抛出一个受检异常&#xff0c;那么该异常需要在目标接口的抽象方法上进行声明&#xff09;我们可以在任意函数式接口上使用Fu…...

Junit测试框架

一、简介 Junit框架是一个开源的Java语言单元测试框架&#xff0c;Java方向使用最广泛的单元测试框架&#xff0c;使用Java开发者都应该学习Junit并能掌握单元测试的编写。 对于Junit和Selenium的关系&#xff1a;通俗点来说Selenium如果比喻为灯泡&#xff0c;那么Junit就是电…...

操作系统复习题

什么是线程&#xff1f; 线程&#xff08;Thread&#xff09;&#xff1a;轻量级进程&#xff0c;是操作系统进行调度的最小单位。一个线程是一个任务&#xff08;一个程序段&#xff09;的一次执行过程。线程不占有内存空间&#xff0c;它包括在进程的内存空间中。在同一个进程…...

web项目的初始化

Tomcat 安装配置 Tomcat 官方站点&#xff1a;Apache Tomcat - Welcome! 。 安装 得到下载的安装包&#xff08;一般是 zip 文件&#xff09;&#xff0c;并解压到你指定的目录&#xff08;建议不要解压在 c 盘&#xff09;&#xff1b;&#xff08;这里以 windows10 系统为例…...

29- 迁移学习 (TensorFlow系列) (深度学习)

知识要点 迁移学习: 使用别人预训练模型参数时&#xff0c;要注意别人的预处理方式。 常见的迁移学习方式&#xff1a; 载入权重后训练所有参数.载入权重后只训练最后几层参数.载入权重后在原网络基础上再添加一层全连接层&#xff0c;仅训练最后一个全连接层.训练数据是 10_m…...

工具篇(五)炫酷排版,尽在LaTeX:让你的文档飞升吧!

作者的话 作为一个文本排版工具&#xff0c;latex一直以来都备受科研工作者、学生和出版社的青睐。但是对于初学者来说&#xff0c;latex的学习曲线可能会有些陡峭。因此&#xff0c;我写这篇博客旨在为初学者提供一个简单易懂的latex教程&#xff0c;让大家能够快速入门并掌握…...

【蓝桥杯PythonB组备赛】【Acwing周赛】第93场 4867. 整除数 4868. 数字替换 python解

目录 A AcWing 4867. 整除数 1.题目描述 2.思路分析 3.代码实现 B AcWing 4868. 数字替换 1.题目描述 2.思路分析 3.代码实现 A AcWing 4867. 整除数 1.题目描述 2.思路分析 为什么不能直接暴力&#xff1f; 数据&#xff1a;1 ≤ n, k ≤ 10 ** 9 1s内最多…...

KNN学习报告

原理 KNN算法就是在其表征空间中&#xff0c;求K个最邻近的点。根据已知的这几个点对其进行分类。如果其特征参数只有一个&#xff0c;那么就是一维空间。如果其特征参数只有两个&#xff0c;那么就是二维空间。如果其特征参数只有三个&#xff0c;那么就是三维空间。如果其特征…...

Java奠基】方法的讲解与使用

目录 方法概述 方法的定义与调用 方法的重载 方法的值传递 方法概述 方法是程序中最小的执行单元&#xff0c;在实际开发中会将重复的具有独立功能的代码抽取到方法中&#xff0c;这样可以提高代码的复用性和可维护性。 方法的定义与调用 在Java中定义方法的格式都是相同…...

字符串hash

K - 子串翻转回文串2020ccpc河南省赛字符串哈希&#xff1a;将字符串变成x进制数对公式的理解&#xff1a;举个十进制数的例子&#xff1a;123456h[1]1&#xff1b;h[2]1*10212;h[3]12*103123;h[4]123*1041234;.........h[i]h[i-1]*xa[i];h[i]代表的恰巧是整个数的前缀用p[i]表…...

试题 算法训练 转圈游戏

问题描述 n个小伙伴&#xff08;编号从0到n-1&#xff09;围坐一圈玩游戏。按照顺时针方向给n个位置编号&#xff0c;从0到n-1。   最初&#xff0c;第0号小伙伴在第0号位置&#xff0c;第1号小伙伴在第 1 号位置&#xff0c;……&#xff0c;依此类推。   游戏规则如下&am…...

【uni-app教程】九、运行环境判断与跨端兼容

&#xff08;1&#xff09;开发环境和生产环境 uni-app 可通过 process.env.NODE_ENV 判断当前环境是开发环境还是生产环境&#xff0c;一般用于连接测试服务器或生产服务器的动态切换。 在HBuilderX 中&#xff0c;点击「运行」编译出来的代码是开发环境&#xff0c;点击「发行…...

扩展WSL2虚拟硬盘的大小

扩展WSL2虚拟硬盘的大小 1、在 Windows PowerShell 中终止所有 WSL 实例 wsl --shutdown2、查看 WSL 实例运行状态&#xff0c;确认关闭&#xff0c;并记住发行版的名称 wsl -l -v如果没有更改移动过发行版安装包位置&#xff0c;那么可以通过以下方法查找到发行版的安装包位…...

Win系统蓝牙设备频繁卡顿/断连 - 解决方案

Win系统蓝牙设备频繁卡顿/断连 - 解决方案前言常见网卡Intel无线网卡&#xff08;推荐&#xff09;Realtek无线网卡总结查看本机网卡解决方案更新驱动更换网卡&#xff08;推荐&#xff09;前言 无线网卡有2个模块&#xff0c;一个是WiFi&#xff0c;一个是蓝牙&#xff0c;因…...

Git学习入门(2)- 基本命令操作总结

个人博客&#xff1a;我的个人博客&#xff0c;各位大佬来玩1 创建 git仓库1.1 从现有工作目录中初始化新仓库需要到你需要用git管理的项目中输入以下命令&#xff1a;git init便会创建一个空的git项目&#xff0c;并且当前目录下会出现一个名为 .git 的目录&#xff0c; Git 需…...

SPringCloud:Nacos快速入门及相关属性配置

目录 一、Nacos快速入门 1、在父工程中添加spring-cloud-alilbaba的管理依赖 2、如果有使用eureka依赖&#xff0c;将其注释 3、添加nacos的客户端依赖 4、修改yml文件&#xff0c;注释eureka配置 5、启动测试 二、Nacos相关属性配置 1、Nacos服务分级存储 2、根据集群…...

医疗器械之模糊算法(嵌入式部分)

模糊控制 所谓模糊控制&#xff0c;就是对难以用已有规律描述的复杂系统&#xff0c;采用自然语言&#xff08;如大&#xff0c;中&#xff0c;小&#xff09;加以描述&#xff0c;借助定性的&#xff0c;不精确的以及模糊的条件语句来表达&#xff0c;模糊控制是一种基于语言的…...

网上销售笔记本系统

技术&#xff1a;Java、JSP等摘要&#xff1a;本文讲述了基于B/S模式的笔记本电脑在线销售系统的设计与实现。所谓的笔记本电脑在线销售系统是通过网站推广互联企业的笔记本电脑和技术服务&#xff0c;并使客户随时可以了解企业和企业的产品&#xff0c;为客户提供在线服务和订…...

MySQL基础查询操作

文章目录&#x1f68f; Select语句&#x1f680; 一、SQL底层执行原理&#x1f6ac; &#xff08;一&#xff09;、查询的结构&#x1f6ac; &#xff08;二&#xff09;、SQL语句的执行过程&#x1f6ad; 1、WHERE 为什么不包含聚合函数的过滤条件&#xff1f;&#xff08;面试…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...