python中init是什么_详细解读Python中的__init__()方法

2023-10-27

__init__()方法是重要的有两个原因。第一个原因是,初始化是最重要的步骤在一个对象的生命周期;每个对象都必须正确地初始化,才能正常工作。第二个原因是,__init__()参数值可以有多种形式。因为有很多方法可以提供参数值__init__(),有很多用例创建对象,我们可以看看其中的一些。我们想要尽可能明确,所以我们需要定义一个初始化正确描述问题域。触摸__init__()方法之前,在任何情况下,我们需要有一个粗略的和简单的观察对象类的层次结构隐含在Python。在这一章,我们看到不同形式的简单对象的初始化(例如:打牌)。之后,我们还可以看更复杂的对象,像手中对象包含集合,包含战略和国家的球员。

这是一个非常简单的类定义和几乎没有做任何事情。我们可以创建一个对象的实例,但我们不能做太多,因为许多特殊的方法容易抛出异常。当我们自定义一个类,对象是超类。下面是类定义的一个例子,它继承了对象与一个新的名字:类X:通过。这里有一些交互定制类:我们可以看到,这个类是一个类类型的对象,和它的基类对象。见每个方法,我们也看看默认行为继承对象。在某些情况下,超类特殊方法的行为就是我们想要的。在其他情况下,我们需要覆盖这个特殊的方法。基类对象的init()方法是基于创建、初始化和销毁。我们推迟先进的特殊方法的创建和销毁以后章节,和目前只专注于初始化。所有类的超类对象__init__()的实现,包括通过默认情况下。

如果没有实现,没有实例变量创建后将创建对象。在某些情况下,这种默认行为是可以接受的。我们总是向对象添加属性,这是基类的子类对象。考虑下面的类,它需要两个实例变量,但不初始化:类矩形:def区域(自我):返回*矩形类都有一个方法,使用两个属性返回一个值。这些属性是没有初始化。这是合法的Python代码。它可以有效地避免专门设置属性,虽然感觉有点奇怪,但有效。以下是与矩形的交互类:104显然这是合法的,但也是混乱的来源,因此它也是我们需要避免的原因。在任何情况下,这种设计提供了很大的灵活性,所以,有时候我们不需要设置中的所有属性__init__()方法。到目前为止,我们已经非常顺利。一个可选属性实际上是一个子类,但不是正式宣布一个子类。

尽管未初始化的属性可能是有用的,他们很可能预示着糟糕的设计。\u201CPython的禅\u201D的建议:\u201C显式优于隐式\u201D。一个__init__()方法应该显式的使用实例变量。可怜的多态性是灵活的和愚蠢的想法。当我们觉得有必要写如下,我们正从边缘的愚蠢的灵活性:如果'x\u201D自我。__dict__:或者尝试:除了AttributeError:是时候重新考虑API,并添加一个常见的方法或属性。重构是更明智的if语句。实现超类的init(),我们初始化对象通过实现__init__()方法。当一个对象被创建时,Python首先创建一个空对象,然后调用__init__()方法的新对象。

以下是卡类定义的层次结构的例子。我们将定义卡超类和三个子类,变异的卡片。两个实例变量直接设定的参数值,并计算了两个变量的初始化方法:卡类:def __init__(自我、等级、套装):=西装=排名,= self._points()类NumberCard(卡):def _points(自我):返回int (), int()类AceCard(卡):def _points(自我):返回1,11类FaceCard(卡):def _points(自我):返回10个,10个在这个例子中,我们提取超类__init__()方法,所以一般在卡初始化父类可以应用到三个子类NumberCard AceCard FaceCard。

每个子类提供了一个独特的_points()方法的实现。所有子类都有相同的特征:他们有相同的方法和属性。这三个子类的对象在一个应用程序中可以互换使用。如果我们使用简单的字符的西装,我们可以创建一个卡的实例如下:卡= [AceCard (' A ', ' ? '), NumberCard (' 2 ', ' ? '), NumberCard (' 3 ', ' ? '))我们列举一些卡片类型,卡值和套装在列表中。从长远来看,我们需要更聪明的工厂函数来创建卡实例;使用这种方法枚举52张牌很无聊而且容易出错。我们联系工厂函数之前,让我们来看看一些其他问题。使用init()来创建显式常量定义西装类卡片。在21点,衣服并不重要,一个简单的字符串。

在许多情况下,物体的一小部分在我们的应用程序可以定义常量的集合。少量的静态对象可能是实现这一战略模式或状态模式的一部分。在某些情况下,我们将有一个恒定的对象池中创建初始化或配置文件,或者我们可以创建常量对象基于命令行参数。我们将初步设计的详细信息和启动设计在16章命令\u201C复制\u201D。Python没有一个简单的和正式的机制来定义一个不可变对象。我们将在第三章相关技术,以确保不变性\u201D属性访问方法属性和描述符\u201D。在这个例子中,是有道理的,衣服是不可变的。下面的类,我们将使用它来创建四个明确的常量:类套装:def __init__(自我、名称、符号):namesymbol常数是由这类:俱乐部,钻石,心,铁锹=套装(\u201C俱乐部\u201D、\u201C?

\u2019),西装(\u2018心\u2019,\u2018?\u2019),西装(\u201C铲\u201D、\u201C?\u201D)现在我们可以通过如下所示的代码片段创建卡片:卡= [AceCard (A,铲)、NumberCard(\u201C2\u201D,铲)、NumberCard(\u201C3\u201D,铲)]这个小例子,这种方法不是一个单一的颜色代码的功能很大的进步。在更复杂的情况下,会有一些策略或国家以这种方式创建的对象。策略或状态设计模式可以更有效的通过重用小,静态常量对象。我们必须承认,这些对象并不是技术上不可变在Python中,它们是可变的。可能会有一些额外的福利编码使这些对象真正不变。

有时令人难以置信的\u201C恶意的程序员\u201D做出调整修改常量值在他们的应用程序。从设计考虑,这是非常愚蠢的。这些令人难以置信的和恶意的程序员不会停止这样做,因为没有更好的方法来用Python代码更加简洁和简单。一个恶意的程序员访问源代码和修改它来编写代码来修改一个常数尽可能容易。最好不要挣扎太久在定义类的不可变的对象。在第三章\u201C访问属性,属性和方法描述符\u201D,我们将展示如何实现不变性在车程序中通过提供适当的诊断信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中init是什么_详细解读Python中的__init__()方法 的相关文章

  • Java哈希(部分)

    1 给定一个字符串s 找到它的第一个不重复的字符 并返沪它的所索引 如果不存在 则返回 1 class Solution public int firstUniqChar String s int array new int 26 for
  • 软件测试职业发展方向

    大家好 我是馨馨紫 软件测试妹纸一枚 有6年的软件测试经验 混过大厂 待过创业公司 独自负责过从0到1的项目测试 也当过测试小组长 今天跟大家分享下软件测试心得 希望对大家有所启发 文章结构如下 一 软件测试概述 二 所需能力模型 三 职业
  • 容器技术在企业落地的最佳实践

    作者 易立 阿里云资深技术专家 导读 近年来 容器技术及相关应用得到了国内外越来越多的关注度 在国外 容器技术已经形成了较成熟的生态圈 而在国内 金融企业 互联网企业 IT 企业积极投入容器技术的应用 本文将重点介绍容器技术在企业落地最佳实
  • uni-app系列:页面跳转以及传递参数

    目录 uniapp实现页面跳转以及跳转后传值过去 一 链接跳转 二 事件跳转 1 uni navigateTo OBJECT 2 uni redirectTo OBJECT 3 uni reLaunch OBJECT 4 uni switc
  • vue的跳转(打开新页面)

    1 router link跳转 直接写上跳转的地址
  • Android显式意图和隐式意图

    intent基本理解 我们都知道Android四大组件 Activity Service broadcast receiver 及 内容提供者 其中 Activity Service broadcast receiver 三大组件之间的通信
  • python爬虫报告范文及模板_python爬虫学习之路,为老婆爬下整站模板-第三章

    由于分析到只是7位置的变化 把以前读取列表的方法改了下 在方法里传值进来 页数我是直接写的999页 然后看到他们网站上如果是没有那一页会返回一个content box的div 里面显示还没有作品 我就查找这个div 如果有这个div存在就跳
  • NeRF 从入门到精通

    目录 NeRF简介 课程 教程 代码实践 商业应用 NeRF简介 NeRF 神经辐射场 是当前最为火热的研究领域之一 基于NeRF的三维视觉年度进展报告 效果非常惊艳 它要解决的问题就是给定一些拍摄的图 如何生成新的视角下的图 不同于传统的
  • Mac基于Gin、Docker-Compose、Mysql的入门搭建

    Mac基于Gin Docker Compose Mysql的入门搭建 在Mac装golang 在Goland建项目 安装Gin 粘贴3个go文件 配置docker 安装mysql 用DataGrip建表录入简单数据 配置Docker Com
  • 字符串类算法题:反转字符串中的单词(js版本)

    题目如下 LeetCode原题链接请点击这里 lesson1 chars js代码如下 解法一 12ms export default str gt 字符串分割成数组 return str split map item gt return
  • 关闭JDWP端口,或者JDWP端口不对公网开放

    查询出的端口是8000 我只需要把8000端口关闭就可以了 ubuntu 查看端口使用情况 使用netstat命令 查看所有服务端口 netstat ap 查看指定端口 可以结合命令grep命令 netstat ap grep 8000 若
  • 深度学习实战之线性回归

    1 线性回归 连续值的预测 目的使模型的预测值逼近于真实值 在训练模型中 函数参数w b往往是不可知的 所以需要对其进行求解 构造一个loss函数 使得误差函数取得最小值 得到的w b 即为模型要求的参数 求loss函数的最小值 通过梯度下
  • 异常中禁用e.printStackTrace()

    相信大家在开发代码的过程中都用过try catch语句 不知道有没有人写过这种语句 try catch Exception e e printStackTrace log error error e 或者 try catch Excepti
  • js时间对比的问题

    开发中 对于时间对比 大家都比较喜欢从页面获取时间之后 直接使用大于小于做判断 比如这样 javascript view plain copy if bgTime edTime bgTime gt edTime alert 开始时间不能晚于
  • 超好用的webssh(支持秘钥登录)

    webssh 项目地址 https github com billchurch WebSSH2 安装 webssh cd usr local git clone https github com billchurch WebSSH2 git
  • 调用其他文件的define_DEFINE_PROFILE用法介绍(1)

    01 概述 可以使用DEFINE PROFILE定义一个自定义边界配置文件或单元格区域条件 该条件随空间坐标或时间而变化 可以自定义的变量如下 速度 压力 温度 湍流动能 湍流耗散率 质量流量 目标质量流量作为流动时间的函数 物种质量分数
  • 新春特辑

    志在哪里 哪里就有成功 心在哪里 哪里就有风景 爱在哪里 哪里就有感动 在新年来临之际 互联互通社区衷心祝愿您 春节快乐 身体健康 心想事成 1 中国非结构化数据中台实践白皮书 2 2020中国服装行业数据中台研究报告 3 2020中国数据
  • Java嵌套if选择结构

    嵌套if选择结构本期用两个例题来讲解 例题1 学校举行运动会 百米赛跑成绩在12s内有资格进入决赛 否则淘汰 进入决赛再根据性别来区别进入男子组决赛和女子组决赛 public static void main String args Sca
  • 区块链学习3:区块链的共识机制

    前往老猿Python博文目录 共识机制主要用于解决分布式计算的根本问题数据的一致性 所谓共识 简单理解就是指参与方都达成一致 在区块链系统中 如何让每个节点通过一个规则将各自的数据保持一致是一个很核心的问题 这个问题的解决方案就是制定一套共

随机推荐

  • Python 写函数,传入一个参数n,返回n的阶乘

    def factorial n param n 参数 return 返回结果 if n lt 0 exit sum 1 for i in range 1 n 1 sum i print sum return factorial 8
  • 分享8个超神的Pycharm插件们,可以说是无敌的存在!

    分享几个YYDS的Pycharm插件 1statics staitcs可以作为KPI摸鱼好助手 120w次下载的这个插件 可以直接统计代码的具体情况 对工程里的每个代码文件进行统计代码量 空行量 注释量 代码行占比等进行清晰统计 下次就算功
  • centos7 nodejs 启动vue项目

    1 准备项目文件及目录 2 检查nodejs 环境 3 安装vue cli脚手架构建工具 命令 npm install g vue cli 4 切换项目目录 运行初始化命令 切换命令 cd projects DDSWeb 初始化命令 vue
  • STM32F1端口复用与重映射(学习心得)

    端口的复用 以USART1为例 PA9管脚的复用功能为 USART1 TX 串口发送端 PA10管脚的复用功能为USART1 RX 串口接收端 对端口复用的配置 GPIO端口的时钟使能 RCC APB2PeriphClockCmd RCC
  • C语言编程必将成为通用技能

    正文 为什么我们要学习编程 编程是当今时代不可或缺的核心技能 它不仅仅是程序员的专属领域 而是逐渐成为一种通用技能 被越来越多的人所需 想象一下 不久的将来 编程将变成人人都会的事情 而职业编程人员会逐渐减少 就像识字一样 编程将成为人们必
  • 用Java实现分页

    查询完全表之后 接下来要做的是查询总条数 和当前是第几页 总共有几页 包括数据 通过Java思想将封装为类 然后调用 pageBean java类可以当做通用的分页的类 Service作用是封装一类服务 比如说注册或者说登录 它是一类服务
  • IMS中Binder案例

    IMS中Binder案例 1 FWK层中AIDL形式 1 1 服务端实现Stub 1 2 客户端获取proxy 2 Native层中AIDL形式 2 1 服务端对应Bn端 2 2 客户端对应Bp端 android12 release 1 F
  • C++指针的使用

    一 指针的定义和使用 可以通过指针来保存一个变量的地址 例如 int a 2 就相当于内存中分出了一个内存块给变量a 而这个内存块中储存的数值为2 假设这个内存块的地址为0x2e 则可以通过定义一个指针来储存这个地址0x2e 指针就是一个地
  • Qt GraphicsView图形视图框架(Graphics View Framework)

    Graphics View提供了一个surface 用于管理大量定制的2D图形项并与之交互 还提供了一个View小部件 用于可视化项目 并支持缩放和旋转 该框架包含一个事件传播框架 该架构允许对场景中的项目提供精确的双精度交互功能 项目可以
  • IP地址总结

    IP地址分类 IP地址的编码分为两部分 网络号和主机号 A类地址默认子网掩码 255 0 0 0 B类地址默认子网掩码 255 255 0 0 C类地址默认子网掩码 255 255 255 0 D类默认子网掩码 255 255 255 25
  • 数学实验-迭代(Mathematica实现)

    一 实验名称 迭代 二 实验环境 Mathematica 10 3软件 三 实验目的 本实验通过Mathematica 10 3软件利用迭代求解方程的近似解 了解迭代方法在解决问题的收敛速度的异同 认识到函数的迭代是数学研究中的一个非常重要
  • P2P和CS架构

    P2P架构 Peer to Peer 特点 1 没有服务器 2 任意端系统直接通信 3 节点阶段性接入internet 4 节点可能更换ip地址 优缺点 优点 动态和随机性 缺点 难以管理 P2P和CS进行文件分发的比较 当文件数增多时 P
  • CSAPP阅读笔记——第二章:信息的表示和处理

    核心内容 编码原则 无符号 补码 浮点 溢出 无符号 补码 精度 浮点 一 信息存储 字节 存储最小单元 程序的内存管理是在虚拟地址层面上 字长 用于指明整数和指针数据的大小 编码虚拟地址 决定虚拟地址空间大小 数据大小 编码数字的格式 其
  • 【LLMs】关于LLMs的语义搜索

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • ElementUI组件el-time-picker的使用(只显示小时,分钟)

    在开发项目的时候 会经常用到时间选择器 但是ElementUI文档上给的示例是带有秒的 下面就是实现只显示小时和分钟的代码
  • libQt5XcbQpa.so.5多个导致load冲突

    直接运行labelme报错如下 qt qpa plugin Could not load the Qt platform plugin xcb in even though it was found This application fai
  • Windows中缺少mfc140.dll文件解决方法

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个mfc140 dll文件进行安装 前提是找到适合
  • 微信小程序蓝牙通信

    微信小程序目前只支持低功耗蓝牙 BLE 不支持经典蓝牙 微信小程序的当前最新版本为2 3 0 根据实际测试 对IOS支持很好 但对Android支持非常不好 各厂商的Android手机遇到的问题也不一样 因此要开发蓝牙功能 推荐只提供IOS
  • 极低级错误引发的“multiple definition of `XXX''”

    在文件x c中声明定义了一个变量temp 在y c中包含了x h头文件 编译时遇到 multiple definition of XXX 提示在y c文件中重定义了temp 反复检查代码 确定一切操作都无误 y c文件中也确定没有定义tem
  • python中init是什么_详细解读Python中的__init__()方法

    init 方法是重要的有两个原因 第一个原因是 初始化是最重要的步骤在一个对象的生命周期 每个对象都必须正确地初始化 才能正常工作 第二个原因是 init 参数值可以有多种形式 因为有很多方法可以提供参数值 init 有很多用例创建对象 我