【python面向对象】

一、魔术函数

在Python中,xx()的函数叫做魔法函数,指的是具有特殊功能或者有特殊含义的函数,而且这些函数都是在某种情况下自动调用的。

eg: init函数

__init__() :对象的初始化函数,在创建一个对象的时默认被调用,不需要手动调用
__init__(self):中的self参数,不需要开发者传递,在Python解释器会自动把当前的对象引用传递过去。
class People(object):def __init__(self,name,age):self.name=nameself.age=agereturndef __str__(self):return self.name +":"+str(self.age)def __lt__(self, other):return self.name < other.name if self.name != other.name else self.ageprint("\t".join([str(item) for item in sorted([People("abc", 18), People("abe", 19), People("abe", 12), People("abc", 17)])]))

打印的结果为:

 abc:17	abc:18	abe:12	abe:19

二、类属性和实例属性

(1)、类属性: 就是类所拥有的属性,它被该类的所有实例对象所共有。
(2)、实例属性:就是单个对象或者实例才能拥有的属性。

1、类属性

(1)、记录的某项数据始终保持一致时,则定义类属性。
(2)、实例属性要求每个对象为其单独开辟一份内存空间来记录数据,而类属性为全类所占有,仅占用一份内存,更加节省内存空间。

class People(object):name="person"def __init__(self,name,age):self.name=nameself.age=agereturndef __str__(self):return self.name +":"+str(self.age)def __lt__(self, other):return self.name < other.name if self.name != other.name else self.ageprint(People.name)
print(People("Tom", 12))

打印的结果为:

person
Tom:12

2、类函数

需要用装饰器@classmethod来标识其为类函数,对于类函数,第一个参数必须是类(当前类),一般以cls作为第一个参数,但是:也可以命名其他的。一般习惯上都用cls。
在这里插入图片描述

3、静态函数

需要通过装饰器@staticmethod来进行装饰,静态方法既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象(如类属性、类方法、创建实例等)时,定义静态方法

取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗。
在这里插入图片描述
对于静态方法不用像类方法需要传递一个参数,可以直接通过类名.方法名的形式进行调用。当然也可以通过对象.类名的形式进行调用。

三、继承和重写

(1)、继承

python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和函数。
在python中,所有类默认继承object类,object类是顶级类或基类。

父类:

子类:在创建子类时将父类作为参数传入。

继承: 继承另一个类的所有方法和属性。

多继承:A类、B类是两个没有继承关系的类,C类即继承了A类又继承了B类。

print('---------------------多继承------------------------')
class A:passclass B:passclass C(A, B):pass

单继承:C类继承了B类,B类继承了A类,C、B、A是层次继承的关系。

print('---------------------单继承------------------------')
class Animal:passclass Animal1(Animal):pass
#父类
class Person:def __init__(mysillyobject, firstname, lastname):mysillyobject.name = firstnamemysillyobject.family = lastnamedef myfunc(abc):print("Hello my name is " + abc.name)#子类,继承
class Student(Person):def __init__(self, fname, year, lname):super().__init__(fname, lname) # 调用父类的属性赋值方法self.graduationyear = year  #子类自己的属性def welcome(self):#子类自己的方法print("Welcome", self.name, self.family, "to the class of", self.graduationyear)x = Student("Elon", 2019, "Musk")
x.welcome()

(2)、重写

覆盖(Override):指在继承中,父类的有些方法在子类中不适用,子类重新定义。

注意:

若子类中被“覆盖”方法的参数类型不同,返回类型不一致,这不是覆盖,而是重载。覆盖要求参数类型必须一样,且返回类型必须兼容。总之,子类对象得保证能够执行父类的一切。
不能降低覆盖方法的存取权限,如public变成private。
若不希望父类的某个方法被子类覆盖,可以用final修饰该方法。甚至可以扩展到将类用final修饰,则其中所有的方法均不可覆盖,但不影响成员变量的赋值。
子类如何重写父类的方法?
前提:
规则一:重写方法不能比被重写方法限制有更严格的访问级别。
(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是public访问权限。)

规则二:参数列表必须与被重写方法的相同。
(需要注意的是如果子类方法的参数和父类对应的方法不一样,那就不是重写,而是重载)

规则三:返回类型必须与被重写方法的返回类型相同。

规则四:重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。

规则五:不能重写被标识为final的方法。

规则六:如果一个方法不能被继承,则不能重写它。比如父类的私有方法就不能被重写。

如果子类能够继承父类的某个方法, 那么子类就能够重写这个方法。

# 如果子类中重写了父类方法
# 在使用子类对象调用方法时,会调用子类中重写的方法
class XiaoTianQuan(Dog):def fly(self):print("会飞")def bark(self):print("OKOK")class TuDog(Dog):def fly(self):passdef bark(self):print("小土狗")# 创建对象1
xtq = XiaoTianQuan()
xtq.bark()
xtq.drink()
xtq.sleep()# 创建对象2
tg = TuDog()
tg.bark()
tg.fly()

持续更新~

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

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

相关文章

RabbitMQ本地Ubuntu系统环境部署与无公网IP远程连接服务端实战演示

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 安装内网穿透工具3.1 安装cpolar内网穿透3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&am…

基于飞桨paddle2.6.1+cuda11.7+paddleRS开发版的目标提取-道路数据集训练和预测代码

基于飞桨paddle2.6.1cuda11.7paddleRS开发版的目标提取-道路数据集训练和预测代码 预测结果&#xff1a; 预测影像&#xff1a; &#xff08;一&#xff09;准备道路数据集 下载数据集地址&#xff1a; https://aistudio.baidu.com/datasetdetail/56961 mass_road.zip …

通过 pnpm 安装依赖包会发生什么

通过 pnpm 安装依赖包会发生什么 通过 pnpm 下载的包都是放在一个全局目录&#xff08;.pnpm-store&#xff09;下&#xff0c;默认是在 ${os.homedir}/v3/.pnpm-store&#xff0c;如果我们不确定在哪里&#xff0c;可以输入下面的命令手动配置&#xff1a; pnpm set store-d…

若依 Vue3的前后端分离系统管理 创建 使用

RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|Java开源框架|Java|SpringBoot|SrpingBoot2.0…

IP/TCP/UDP协议的关键知识点

导语&#xff1a;网络协议是理解网络情况的基础&#xff0c;当遇到网络问题时&#xff0c;首先可以从网络协议入手&#xff0c;熟悉的网络协议可以有效帮助小伙伴们排查或者说定位大概的问题方面。本文整理了目前最常用的网络通信协议&#xff0c;相信对小伙伴们肯定都有帮助。…

cookie实战案例-自动登录网站

在写爬虫的时候&#xff0c;要伪装成真实用户请求。可能需要大量的IP地址&#xff0c;那么大量的IP地址从哪里来呢&#xff1f;这里就需要用代理IP来解决了&#xff0c;有的网站专门通过提供代理IP池服务作为主要的经营业务&#xff0c;只要注册相关网站开通对应套餐就可以了。…

Java笔试面试题AI答之JDBC(1)

文章目录 1. 什么是JDBC&#xff1f;2. 驱动(Driver)在JDBC中的角色&#xff1f;3. JDBC PreparedStatement比Statement有什么优势&#xff1f;1. 预编译和性能提升2. 参数化查询和安全性3. 更好的可读性和可维护性4. 支持批量操作5. 缓存机制&#xff08;特定数据库环境&#…

2024 高教社杯 数学建模国赛 (A题)深度剖析|“板凳龙” 闹元宵|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; CS团队倾注了大量时间和心血&#xff0c;深入挖掘解…

2024 年高教社杯全国大学生数学建模竞赛题目-D 题 反潜航空深弹命中概率问题

应用深水炸弹&#xff08;简称深弹&#xff09;反潜&#xff0c;曾是二战时期反潜的重要手段&#xff0c;而随着现代军事技术 的发展&#xff0c;鱼雷已成为现代反潜作战的主要武器。但是&#xff0c;在海峡或浅海等海底地形较为复杂的 海域&#xff0c;由于价格低、抗干扰能力…

读懂以太坊源码(4)-详细解析节点配置文件geth.toml

要读懂以太坊源码&#xff0c;先熟悉配置文件的每个配置项也是非常有必要的&#xff0c;以下代码是以太坊主网配置文件(geth.toml)的完整内容&#xff0c;后面是对每个配置项的说明&#xff1a; [Eth] NetworkId 0 SyncMode "snap" EthDiscoveryURLs [] SnapDisc…

14 C语言实现平衡二叉树

//LL型失衡 右旋 //RR型失衡 左旋 //RL型失衡 先右旋 再左旋 //LR型失衡 先左旋 再右旋 #include "stdio.h" #include "stdlib.h"typedef int ElemType; typedef struct node {ElemType data;int height;struct node *left;struct node *right; } Node;Nod…

SpringBoot生成ETH和ERON钱包

首先大家需要先引入相关依赖包&#xff0c;这个maven里面是没有的&#xff0c;需要我们自行导入才可以。在项目路径下面创建lib&#xff0c;将所有需要使用的包导入即可。给大家一个包的下载链接&#xff1a;https://download.csdn.net/download/qq_38935605/89715772 因为放在…

scrapy 爬取微博(一)【最新超详细解析】:创建微博爬取工程

本项目属于个人学习记录&#xff0c;爬取的数据会于12小时内销毁&#xff0c;且不可用于商用。 1 初始化环境 首先我们需要有python环境&#xff0c;先安装一下python&#xff0c;然后配置环境变量&#xff0c;这边给出windows的配置&#xff1a; 我这边的安装目录是D:\pyt…

关于SPI通信失败的一种情况(CRC校验不匹配的问题)

问题 该项目中&#xff0c;使用外置的ADC芯片采集电压电流&#xff0c;主控MCU通过SPI与ADC芯片通信。调试时&#xff0c;SPI通信一直失败&#xff0c;与之前成功的项目对比&#xff0c;发现是SPI配置的问题。 void MX_SPI2_Init(void) {/* USER CODE BEGIN SPI2_Init 0 *//*…

WIFI贴项目到底是不是“骗局”呢?由我来揭秘!

各位亲爱的朋友们&#xff0c;大家好&#xff01;我是你们的老朋友鲸天科技千千&#xff0c;一直在这片互联网的热土上耕耘。相信你们对我都不会陌生&#xff0c;因为我常常分享一些互联网上的新奇项目和实用技巧。如果你对我的内容感兴趣&#xff0c;别忘了点个关注哦&#xf…

【案例67】Npart批量启动服务卡顿严重分析过程

问题现象 通过Npart启动NC服务&#xff0c;发现只启动一个&#xff0c;大概3min左右即可启动成功。但是批量启动服务需要几十分钟才可以把服务启动成功&#xff0c;启动卡在获取“wenjian”图标处。 绕过Npart直接写脚本并行启动相关服务&#xff0c;发现也需要30min 问题分析…

数组与贪心算法——605、121、122、561、455、575(5简1中)

605. 种花问题&#xff08;简单&#xff09; 假设有一个很长的花坛&#xff0c;一部分地块种植了花&#xff0c;另一部分却没有。可是&#xff0c;花不能种植在相邻的地块上&#xff0c;它们会争夺水源&#xff0c;两者都会死去。 给你一个整数数组 flowerbed 表示花坛&#xf…

网络传输加密及openssl使用样例(客户端服务器)

文章目录 背景常用加密方式SSLOpenSSL主要功能 库结构 交互流程证书生成生成 RSA 私钥私钥的主要组成部分私钥的格式 创建自签名证书: 签发证书服务器端代码客户端代码常见错误版本问题证书问题证书格式 背景 网络传输中为保证数据安全&#xff0c;通常需要加密 常用加密方式…

1.初识ChatGPT:AI聊天机器人的革命(1/10)

引言 在当今的数字化世界中&#xff0c;人工智能&#xff08;AI&#xff09;正以其独特的方式重塑我们的生活和工作。其中&#xff0c;AI聊天机器人作为人机交互的前沿技术&#xff0c;已经成为企业与客户沟通、提供个性化服务的重要工具。这些机器人通过模拟人类的对话方式&a…

【Unity3D优化】优化内置shader的内存占用

一、性能分析 监控项目线上的崩溃情况&#xff0c;绝大多数崩溃都是因为低端设备&#xff0c;运行时内存不足&#xff0c;在运行过程中申请开辟新的内存时Crash了。因此&#xff0c;不定期继续优化内存占用。 性能分析首先主要靠Unity3d的Memory Profiler监控一些可追踪到的内存…