python(57): 类与实例化

1.__new__ 与 __init__

class Test(object):def __init__(self, *args, **kwargs):  #第一个参数是当前类实例print("in init...")def __new__(cls, *args, **kwargs):print("in new...")return object.__new__(cls, *args, **kwargs)  #第一个参数当前类test = Test()

__new__: 

特性:

__new__() 方法是在类准备将自身实例化时调用。

__new__() 方法始终都是类的静态方法,即使没有被加上静态方法装饰器。

Python 默认是调用该类的直接父类的 __new__() 方法来构造该类的实例,如果该类的父类也没有重写 __new__(),那么将一直按此规矩追溯至 object 的 __new__() 方法,因为 object 是所有新式类的基类。

作用:

实例化当前类并返回此实例对象

__init__:

特性:

第一个参数是当前类实例

作用:

初始化方法 -》初始化类实例

实例化过程

class Myclass(object):def __init__(self, x):self.x = xc1 = Myclass(11)                   #相当于隐式执行了__new__()和__init()
c2 = Myclass.__new__(Myclass, 12)  #显式调用__new__(),返回c2对象
c2.__init__( 12)                   #显示调用__init(),完成c2的初始化
print c1.x, c2.x输出: 11    12

__new__ 是先实例化一个对象, __init__ 是初始化一个对象,中间会自动调用。

新式类开始实例化时,__new__() 方法会返回 cls(cls 指代当前类)的实例,然后该类的 __init__() 方法作为构造方法会接收这个实例(即self)作为自己的第一个参数,然后依次传入 __new__() 方法中接收的位置参数和命名参数。

注意:如果 __new__() 没有返回 cls(即当前类)的实例,那么当前类的 __init__() 方法是不会被调用的。如果 __new__() 返回其他类(新式类或经典类均可)的实例,那么只会调用被返回的那个类的构造方法。

新式类与经典类:2021年了你还不了解新式类与经典类? - 掘金

单例 -- 体现实例化在__new__中

 class Singleton(object):_instance = Nonedef __new__(cls, *args, **kwargs):if cls._instance is None:cls._instance = object.__new__(cls, *args, **kwargs)return cls._instances1 = Singleton()
s2 = Singleton()
print(s1)
print(s2) 

2.类中方法分类

*实例方法:在类中定义的方法通常默认都是实例方法,包括构造方法。

实例方法最大的特点就是,它最少也要包含一个 self 参数,用于绑定调用此方法的实例对象(Python 会自动完成绑定)。实例方法通常会用类对象直接调用

**类方法:至少要有一个形式参数,通常命名为 cls,Python 会自动将类本身(注意:不是类对象)绑定给 cls 参数,无需显式为 cls 传参;并且类方法需要用 @classmethod 修饰符进行修饰。

类方法推荐使用类名直接调用,当然也可以使用实例对象来调用(不推荐)。

*静态方法:静态方法需要使用 @staticmethod 修饰符进行修饰。

调用:即可以使用类名,也可以使用实例对象

3.类属性

*类体中、所有函数之外:此范围定义的变量,称为类属性或类变量;

*类体中,所有函数内部:以“self.变量名”的方式定义的变量,称为实例属性或实例变量;

*类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量。

4.内部类

class MyOuter:age=18def __init__(self,name):self.name=nameclass MyInner:def __init__(self,inner_name):self.inner_name=inner_nameout=MyOuter('lqz')
inner=out.MyInner('lqz_inner')
print(inner.inner_name)

https://www.cnblogs.com/liuqingzheng/p/9504210.html

5.参考:

python 类的实例化的全过程 — A/B

https://www.cnblogs.com/111testing/p/13660863.html

 Python实例方法、静态方法和类方法详解(包含区别和用法)

https://www.cnblogs.com/liuqingzheng/p/9504210.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单纯的人工智能分级很可能是个伪命题

对许多人而言,人工智能分级像是一个真实存在的概念。人工智能可以根据其智能水平的不同,分为不同的级别。例如,常见的人工智能分级有弱人工智能和强人工智能。 弱人工智能是指在特定任务上能够表现出人类智能水平,但在其他任务上无…

【QT+QGIS跨平台编译】之五:【curl+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、curl介绍二、curl下载三、文件分析四、pro文件五、编译实践 一、curl介绍 curl(CommandLine Uniform Resource Locator)主要功能就是用不同的协议连接和沟通不同的服务器,相当封装了的socket。 libcurl支持http, https, ftp, g…

大模型实战营Day5笔记

大模型部署背景 大模型部署是指将训练好的模型在特定的软硬件环境中启动的过程,使模型能够接收输入并返回预测结果。大模型的内存开销巨大,7B模型仅权重需要14G内存。另外大模型是自回归生成,需要缓存Attention的 k/v。 LMDeploy 简…

超简单的OCR模块:cnocr

前言 毫无疑问的是,关于人工智能方向,python真的十分方便和有效。 这里呢,我将介绍python众多OCR模块中一个比较出色的模块:cnocr 模块介绍 cnocr是一个基于PyTorch的开源OCR库,它提供了一系列功能强大的中文OCR模型和…

小型园区组网实例

目录 拓扑需求IP规划路由配置交换机配置NAT配置ACL配置DHCP配置配置过程:配置结果: OSPF配置链路聚合配置配置过程: 网络测试 拓扑 需求 企业网络信息服务平台需实现功能:企业网站服务器、FTP服务器、DNS服务器。企业ip分配地址段…

阿里巴巴开源联邦学习框架FederatedScope

5月5日,阿里巴巴达摩院发布新型联邦学习框架FederatedScope,声称可以在不共享训练数据的情况下开发机器学习算法,从而保护隐私。,其源代码现已在Apache 2.0许可下发布在GitHub上。 介绍 该平台被描述为一个全面的联邦学习框架&a…

html 3D 倒计时爆炸特效

下面是代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>HTML5 Canvas 3D 倒计时爆炸特效DEMO演示</title><link rel"stylesheet" href"css/style.css" media"screen&q…

Ubuntu用gparted重新分配空间

ubuntu系统使用过程中安装系统时预先留的空间不够使用怎么办&#xff1f; 这么办&#xff01; 首先 使用df -h 查看当前空间使用情况 已经分配的空间重新规划 &#xff1f; 先将已分配的空间中的多余空间分离出来&#xff1b; 假设我想将挂载点/home下的一部分空间分给挂载…

BL120PM PLC网关,实现PLC协议转Modbus协议

随着物联网技术的迅猛发展&#xff0c;人们深刻认识到在智能化生产和生活中&#xff0c;实时、可靠、安全的数据传输至关重要。在此背景下&#xff0c;高性能的物联网数据传输解决方案——协议转换网关应运而生&#xff0c;广泛应用于工业自动化和数字化工厂应用环境中。 钡铼…

L1-054 福到了(Java)

“福”字倒着贴&#xff0c;寓意“福到”。不论到底算不算民俗&#xff0c;本题且请你编写程序&#xff0c;把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N N 的网格组成的&#xff0c;网格中的元素或者为字符 或者为空格。而倒过来的汉字所用的字符由裁判指定。 输…

在linux部署Prometheus+Grafana+Exporter监控系统性能

Prometheus、Grafana和Report组件是什么&#xff1f; Prometheus、Grafana和Exporter是常用于系统监控和指标收集的组合。 Prometheus是一种开源的系统监控和警报工具。它可以收集各种指标数据&#xff0c;并提供强大的查询语言和灵活的警报规则&#xff0c;用于实时监控系统…

Prometheus配置Grafana监控大屏(Docker)

拉取镜像 docker pull grafana/grafana挂载目录 mkdir /data/prometheus/grafana -p chmod 777 /data/prometheus/grafana临时启动 docker run -d -p 3000:3000 --name grafana grafana/grafana从容器拷贝配置文件至对应目录 docker exec -it grafana cat /etc/grafana/gra…

Java中遍历Map

方法多种多样&#xff0c;其实大差不差~ 通过 键值集&#xff08;entrySet&#xff09;遍历 System.out.println("Ⅰ、使用 entrySet() 方法遍历&#xff1a;"); for (Map.Entry<String, String> entry : map.entrySet()) {String key entry.getKey();Strin…

Linux之安装配置CentOS7+换源

目录 一. 安装CentOS7 二. 配置CentOS7 三. 查看、设置IP地址 3.1 查看IP地址 3.2 设置IP地址 四. 使用Xshell连接Linux客户端 4.1 Xshell的下载 4.2 Xshell的使用 五. 换软件源 一. 安装CentOS7 博主是在虚拟机中进行安装的&#xff0c;大家也可以在虚拟机中跟着尝试一…

已解决Error:AttributeError: module ‘numpy‘ has no attribute ‘int‘.

文章目录 引言报错分析解决方案1&#xff1a;降低NumPy版本解决方案2&#xff1a;更改NumPy源码 结尾 引言 在Python编程中&#xff0c;NumPy是一个不可或缺的库&#xff0c;尤其在处理大规模数值计算时。但即使是这个强大的工具&#xff0c;也可能在使用过程中遇到问题。其中…

Qt —— 编写Windows截图软件(附源码)

示例效果 源码1 #include "maskwidget.h" #include "qapplication.h"MaskWidget *MaskWidg

Ubuntu 22.04 LTS 安装使用腾达(Tenda) W311MIv6 AX300 无线网卡

安装教程&#xff1a;腾达&#xff08;Tenda&#xff09;W311MIv6 AX300无线网卡Linux系统安装方法_腾达(Tenda)官方网站 问题解答&#xff1a;腾达(Tenda) W311MIv6 网卡常见问题解答&#xff1f;_腾达(Tenda)官方网站 注意&#xff1a;如果电脑连手机热点上网&#xff0c;手…

ZigBee学习(一)

文章目录 一、ZigBee介绍二、IEEE 802.15.42.1 物理层2.2 MAC层2.3 如何实现网络和设备寻址2.4 能量管理 三、ZigBee网络拓扑结构四、ZigBee配置参数 一、ZigBee介绍 ZigBee是一种基于IEEE 802.15.4标准的高级通信协议&#xff0c;它被设计用于低速率、低功耗和短距离无线通信&…

YOLOv8 视频识别

YOLOv8 是一种目标检测算法&#xff0c;用于识别视频中的物体。要控制视频识别中的帧&#xff0c;可以通过以下方式来实现&#xff1a; 设置帧率&#xff1a;可以通过设置视频的帧率来控制视频的播放速度&#xff0c;从而影响视频识别的速度。 跳帧处理&#xff1a;可以通过跳…

《移动通信原理与应用》——QPSK调制解调仿真

目录 一、QPSK调制与解调流程图&#xff1a; 二、仿真运行结果&#xff1a; 三、MATLAB仿真代码&#xff1a; 一、QPSK调制与解调流程图&#xff1a; QPSK调制流程图&#xff1a; QPSK解调流程图&#xff1a; 二、仿真运行结果&#xff1a; 1、Figure1:为发送端比特流情…