python中的类

_init_()函数

所有类都有一个名为__init__()的函数,它在每次使用类创建新对象时都会自动执行,可用于将用户指定的值在初始就赋给对象的属性,或者在创建对象时执行一些固定操作,如下:

class Person:def __init__(self, name, age):self.name = nameself.age = age

以双下划线开头和结尾的函数

这些双下划线函数的名称是预先定义好的,当用户和使用某些内置函数或进行特定操作时,python解释器会自动调用这些双下划线函数。

如, init() 用于初始化对象,str() 用于返回对象的字符串表示,eq() 用于比较对象是否相等。

那么当用户使用print()函数来打印对象时,python解释器会尝试调用对象的__str__()函数来获取对象的字符串表示;若没有定义__str__()函数,就会使用默认的对象表示方式,如下:

class Vector:def __init__(self, a, b):self.a = aself.b = bdef __str__(self):return 'Vector (%d, %d)' % (self.a, self.b)def __add__(self,other):return Vector(self.a + other.a, self.b + other.b)v1 = Vector(2,10)
v2 = Vector(5,-2)
print v1 + v2

输出为:

Vector(7,8)

此外,以双下划线开头的变量表示是私有类型的变量,只能允许这个类本身内部进行访问;以单下划线开头表示protected类型的变量,只允许其本身与子类内部进行访问,不能用于from module import *

self参数

self参数是对类当前实例的引用,用于访问属于该实例的变量。其实self可以改为其他名字,但必须是类中任意函数的首个参数,如下:

class Person:def __init__(mysillyobject, name, age):mysillyobject.name = namemysillyobject.age = agedef myfunc(abc):print("Hello my name is " + abc.name)

类内的函数和普通函数只有一个特别的区别:前者必须有一个额外的第一个参数,按照惯例命名为self。self代表当前对象的地址,而self.__class__则指类

class Test:def prt(self):print(self)print(self.__class__)t = Test()
t.prt()

输出为

<__main__.Test instance at 0x10d066878>
__main__.Test

对象销毁(垃圾回收)

python使用引用计数来跟踪和回收垃圾。在python内部记录着所有使用中的对象各有多少引用。

当对象被创建时,就创建了一个引用计数;当其不再被需要时,即此对象的引用计数变为0时,它被垃圾回收。但回收不是立即的,而是由解释器在适当的时机,将垃圾对象占用的内存空间回收

析构函数__del__()在对象销毁的时候被调用

class Point:def __init__( self, x=0, y=0):self.x = xself.y = ydef __del__(self):class_name = self.__class__.__name__print class_name, "销毁"pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3) # 打印对象的id
del pt1
del pt2
del pt3

输出如下

3083401324 3083401324 3083401324
Point 销毁

类的继承

继承语法如下:

class 子类名(父类名)...

python总是首先查找本类中的方法,若不能在本类中找到对应方法,它才开始到父类中逐个查找。

class Parent:        # 定义父类parentAttr = 100def __init__(self):print "调用父类构造函数"def parentMethod(self):print '调用父类方法'def setAttr(self, attr):Parent.parentAttr = attrdef getAttr(self):print "父类属性 :", Parent.parentAttrclass Child(Parent): # 定义子类def __init__(self):print "调用子类构造方法"def childMethod(self):print '调用子类方法'c = Child()          # 实例化子类
c.childMethod()      # 调用子类的方法
c.parentMethod()     # 调用父类方法
c.setAttr(200)       # 再次调用父类的方法 - 设置属性值
c.getAttr()          # 再次调用父类的方法 - 获取属性值

输出如下:

调用子类构造方法
调用子类方法
调用父类方法
父类属性 : 200

方法重写

若子类想要修改父类中的方法,可以直接在子类中进行重写

class Parent:        # 定义父类def myMethod(self):print '调用父类方法'class Child(Parent): # 定义子类def myMethod(self):print '调用子类方法'c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法

输出如下:

调用子类方法

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

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

相关文章

Python之Web开发初学者教程—ubuntu下vi的使用

Python之Web开发初学者教程—ubuntu下vi的使用 vi\vim 文本编辑器 i 切换到输入模式&#xff0c;以输入字符。 x 删除当前光标所在处的字符。 : 切换到底线命令模式&#xff0c;以在最底一行输入命令。 vi 保存并退出&#xff1a;esc键退出编辑-…

网络学习:Vlan原理

目录 一、交换机对数据帧的处理 1、Access&#xff1a; 2、Trunk&#xff1a; 3、Hybrid&#xff1a; 二、VLAN的划分方式 三、VLAN信息的传播技术&#xff08;MVRP协议&#xff09; 1、VLAN动态注册背景&#xff1a; 2、MVRP技术&#xff1a; 3、MVRP注意点&#xff…

前缀和与差分——练习(一维+二维)

一、前言 前缀和与差分算是很常用的算法&#xff0c;熟记是有必要的。 ——题目来源y总每日一题&#xff0c;感觉正适合模板分块讲解系列。 二、浅谈 我们可以用a数组作为前缀和数组&#xff0c;b数组作为差分数组&#xff0c;因为二者互为逆运算。 他们常常用做优化&#xff…

Python爬虫——Selenium

简介 Selenium是一个自动化测试框架&#xff0c;可以通过编程语言控制浏览器进行各种操作。在Python中&#xff0c;可以使用Selenium实现爬虫。 首先&#xff0c;我们需要需要安装Selenium库。可以使用pip命令安装&#xff1a; pip install selenium要使用的话我们还需…

7-Zip:一款免费开源但强大的压缩软件

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、什么是7-zip?①为什么选择7-Zip?②7-Zip的主要特点二、下载安装三、如何使用7-Zip?四、总结很高兴你打开了这篇博客,如有疑问,欢迎评论…

密码学之椭圆曲线

引言 DH(Diffie-Hellman)密钥交换算法于1976年提出,是第一个公开密钥交换算法。其基础是数学中的群论,群论也是大多数公开密钥密码的基础。简单来说,群是一组元素的集合以及在这些元素上定义的特殊二元运算。 一个群需要满足如下性质: 封闭性:群中两个元素的运算结果仍…

用于生成环境噪声的Noisedash

本文中关于音频的专业描述&#xff0c;来自于互联网和 ChatGPT&#xff1b; 什么是白噪声 &#xff1f; 白噪声&#xff08;White Noise&#xff09;是具有平均功率的随机信号&#xff0c;其功率在整个频谱范围内均匀分布。它的能量在所有频率上都是相等的&#xff0c;没有频率…

【Linux C | 网络编程】广播概念、UDP实现广播的C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

代码随想录算法训练营第33天—动态规划01 | ● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

动态规划理论基础 https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 视频&#xff1a;https://www.bilibili.com/video/BV13Q4y197Wg 主要题型 动规基础题 斐波那契数列 背包问题打家劫舍股票问题子序列问题 解题…

伟大音乐家的伟大不朽作品,贝多芬一生的音乐作品全集

一、音乐描述 贝多芬一生创作题材广泛&#xff0c;重要作品包括9部交响曲、1部歌剧、32首钢琴奏鸣曲、5首钢琴协奏曲、多首管弦乐序曲及小提琴、大提琴奏鸣曲等。因为其对古典音乐的重大贡献&#xff0c;以及对奏鸣曲式和交响曲套曲结构的发展和创新&#xff0c;而被后世尊称为…

【比较mybatis、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp操作数据】操作批量新增、分页查询(四)

orm框架使用性能比较 比较mybatis、lazy、sqltoy、mybatis-flex、easy-query、mybatis-mp操作数据 环境&#xff1a; idea jdk17 spring boot 3.0.7 mysql 8.0测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本编码方式mybatis☑️☑️3.5.4lambda xml 优化sq…

【记录31】elementUI el-tree 虚线、右键、拖拽

父组件 <eltree :treeData"treeData"></eltree>import eltree from "../../components/tree.vue"; export default {name: ,components: { // org_tree ,eltree},watch: {},data() {return {orgFormchoose: {},orgForm: { type: 0, limits: 1…

Python乱码恢复

比如说网页是ISO-8859-1编码&#xff0c;然后requests得到的是乱码&#xff0c; 那么这样操作就可以还原数据&#xff1a;res.text.encode(‘ISO-8859-1’).decode(‘utf-8’) 乱码恢复网站&#xff0c;可以知道是什么编码http://www.mytju.com/classCode/tools/messyCodeReco…

CRC8/CRC16/CRC32全面对比详解

在现代数据通信和存储技术中&#xff0c;CRC&#xff08;Cyclic Redundancy Check&#xff0c;循环冗余校验&#xff09;算法作为一种关键的错误检测机制&#xff0c;在确保数据完整性方面扮演着不可或缺的角色。该算法基于一个特定的生成多项式对原始数据块进行模2除法运算&am…

Stable Diffusion——Animate Diff一键AI图像转视频

前言 AnimateDiff 是一个实用框架&#xff0c;可以对文本生成图像模型进行动画处理&#xff0c;无需进行特定模型调整&#xff0c;即可为大多数现有的个性化文本转图像模型提供动画化能力。而Animatediff 已更新至 2.0 版本和3.0两个版本&#xff0c;相较于 1.0 版本&#xff…

Golang关键字defer

# Golang 关键字 defer 的用法和原理## 什么是 defer在 Golang 中&#xff0c;有一个特殊的关键字 defer&#xff0c;它可以让一个函数或者语句在当前函数返回之前执行。defer 的常见用途有&#xff1a;- 关闭文件、数据库连接、网络连接等资源 - 解锁互斥锁 - 捕获和处理异常 …

C#高级:Winform桌面开发中DataGridView的详解

一、每条数据增加一个按钮&#xff0c;点击输出对应实体 请先确保正确添加实体的名称和文本&#xff1a; private void button6_Click(object sender, EventArgs e) {//SQL查询到数据&#xff0c;存于list中List<InforMessage> list bll.QueryInforMessage();//含有字段…

代码思想录-动态规划(509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯)

509. 斐波那契数 class Solution { public:int fib(int n){if (n0) return 0;if (n1) return 1;vector<int> dp(n1, 0);dp[0] 0;dp[1] 1;for (int i2; i<n1;i){dp[i] dp[i-1] dp[i-2];}return dp[n];} }; 70. 爬楼梯 class Solution { public:int climbStairs(…

Linux删除Mysql

//rpm包安装方式卸载 查包名&#xff1a;rpm -qa|grep -i mysql 删除命令&#xff1a;rpm -e –nodeps 包名//yum安装方式下载 1.查看已安装的mysql 命令&#xff1a;rpm -qa | grep -i mysql 2.卸载mysql 命令&#xff1a;yum remove mysql-community-server-5.6.36-2.el7.x86…

E8-完善数据库备份的存储过程

起因 我们公司E8的数据用的是SQL Server 2012在我把从生产环境下复制来的数据库备份文件恢复到本机测试环境里时&#xff0c;被提示硬盘空间不足。备份文件3G多&#xff0c;硬盘剩余空间10G左右。于是我去生产环境看了一下数据库的物理文件&#xff0c;就是扩展名是mdf文件&am…