Python高级一

news/2024/4/16 15:19:03/文章来源:https://blog.csdn.net/only_write_bug/article/details/136542939

一、介绍

        1、特点

            面向对象 

                   对象:对客观事物的抽象

                            对一个具体事务的存在,现实生活中可以看得见摸得着的

                            可以直接使用的

        2、类和对象的关系

                类:对对象的抽象

                        具有相似内部状态和运动规律的实体的集合(或统称为抽象)       

                        具有相同属性和行为事物的统称

                类∶是创建对象的模板
                对象︰是依据类产生的一个具体实例

二、类

           self的介绍

        1、类的定义

                在Python中,使用class关键字定义一个类。类名通常采用大驼峰命名法(即每个单词首字母大写,其余小写)。类可以包含属性(变量)和方法(函数)。

        2、类的创建

        示例

class Hero:         #定义一个类hp = "我快没血了"    #定义成员变量  不建议使用,只读不可修改def printmsg(self):        #定义一个成员函数 , self相当于this指针print("我是提莫我快乐")    #函数体#类的使用
timo = Hero()              #定义一个类对象
timo.printmsg()            #类对象调用函数
print(timo.hp)

        输出结果

          3.对象的添加

        示例

class Hero:         #定义一个类hp = "我快没血了"    #定义成员变量  不建议使用,只读不可修改def printmsg(self):  # 定义一个成员函数 , self相当于this指针print("我是提莫我快乐")  # 函数体timo = Hero()              #定义一个类对象
timo.printmsg()            #类对象调用函数
print(timo.hp)
#添加对象
timo.name = "提莫"
timo.age = 18
print("名字:{}, 年龄: {}".format(timo.name, timo.age))

        结果

        4、魔法方法

                1)定义

                在Python中,魔法方法(也称为特殊方法)是以双下划线(__)开头和结尾的方法,它们提供了一种方式来实现和修改对象的内置行为。这些方法允许开发者对Python的内置操作进行自定义实现,比如算术运算、项访问、属性访问、字符串表示等。

                2)魔法方法的使用

        a、__init__(self,[...]):   构造器
class Hero:         #定义一个类#魔法方法: __init__(self): 构造器,相当于析构函数def __init__(self):self.jn = "大招"timo = Hero()
print("技能:{}".format(timo.jn))

    

class Hero:         #定义一个类#魔法方法: __init__(self): 构造器,相当于析构函数def __init__(self, name = "提莫", age = 18, hp = 1800):self.jn = "大招"self.name = nameself.age = ageself.hp = hptimo = Hero()
print("姓名:{}, 年龄:{}, 血量:{},技能:{}".format(timo.name, timo.age, timo.hp, timo.jn))

        b、__del__(self) :析构器

                它在对象生命周期结束时被调用,用于执行对象的清理工作。

class Hero:         #定义一个类#魔法方法: __init__(self): 构造器,相当于析构函数def __init__(self, name = "提莫", age = 18, hp = 1800):self.jn = "大招"self.name = nameself.age = ageself.hp = hpprint("对象创建成功")def __del__(self):print("对象消除成功")
timo = Hero()
print("姓名:{}, 年龄:{}, 血量:{},技能:{}".format(timo.name, timo.age, timo.hp, timo.jn))

三、类的继承

        1、单继承

        在面向对象编程中,单继承指的是一个子类(派生类)仅继承自一个父类(基类)。这种继承机制允许子类获取父类的属性和方法,同时也可以添加或修改属性和方法,以实现特定的功能

        示例

#定义父类
class Parent:         #定义一个类#魔法方法: __init__(self): 构造器,相当于析构函数def __init__(self):self.val = "我是父类属性"def __del__(self):print("父类对象消除成功")def show(self):print("{}".format(self.val))#定义派生类确定继承关系
class Child(Parent):def __init__(self):# 调用父类的__init__方法super().__init__()self.childVal = "我是子类属性"def show1(self):print(self.childVal)def __del__(self):print("派生类对象消除成功")# 创建子类实例
child = Child()
# 调用继承自父类的方法
child.show()  # 输出: 我是父类属性
# 调用子类的方法
child.show1()  # 输出: 我是子类属性

        在子类中,super()函数是一个特殊的函数,它返回的是一个临时对象,该对象允许你调用父类中定义的方法。最常见的用途是在子类中调用父类的初始化方法__init__,就像上面的示例那样。这样做可以确保父类被正确地初始化

        2、多继承

        虽然单继承使得继承关系更加简单和清晰,但它也有其局限性。在某些情况下,一个类可能需要从多个源继承属性和方法,单继承无法满足这种需求。Python 为此提供了多继承机制,允许一个类同时继承多个父类,以覆盖单继承的这一局限性。

        示例

#定义父类
class Parent1:def __init__(self):self.val = "我是父类属性一"def show1(self):print("{}".format(self.val))class Parent2:def __init__(self):self.val = "我是父类属性二"def show2(self):print("{}".format(self.val))#定义派生类确定继承关系
class Child(Parent1, Parent2):def __init__(self):# 调用父类的__init__方法super().__init__()self.childVal = "我是子类属性"def show(self):print(self.childVal)def __del__(self):print("派生类对象消除成功")# 创建子类实例
child = Child()
# 调用继承自父类的方法
child.show1()  # 输出: 我是父类属性一
child.show2()  # 输出: 我是父类属性二
# 调用子类的方法
child.show()  # 输出: 我是子类属性

        3、私有继承

                在面向对象编程中,私有继承是一种特殊的继承方式,它允许子类继承父类的实现细节,包括私有成员和保护成员。私有继承并不常见,因为它通常会导致紧耦合的代码,使得子类与父类之间过于依赖。

                在Python中,没有直接支持私有继承的语法。Python中的继承是默认公有继承,即子类可以访问父类的公有成员(公有方法和属性),但不能直接访问父类的私有成员。

然而,通过一些技巧,可以模拟私有继承的效果

        示例

class Parent1:def __init__(self):self.public_var = "Public"  #公有self._protected_var = "Protected"   #保护self.__private_var = "Private"        #私有def public_method(self):print("This is a public method")def _protected_method(self):print("This is a protected method")def __private_method(self):print("This is a private method")class Child(Parent1):def __init__(self):super().__init__()def access_base_members(self):# 可以访问父类的公有成员print(self.public_var)  # 输出: Public# 可以访问父类的保护成员print(self._protected_var)  # 输出: Protected# 不能直接访问父类的私有成员# print(self.__private_var)  # 报错def call_base_methods(self):self.public_method()  # 可以调用父类的公有方法self._protected_method()  # 可以调用父类的保护方法# self.__private_method()  # 报错,无法调用父类的私有方法child = Child()
child.access_base_members()
child.call_base_methods()

        4、私有继承@property用法

                在 Python 中,@property 装饰器用于将类的方法转换为属性,从而实现对属性的访问和设置时可以执行特定的逻辑。使用 @property 装饰器可以使代码更具可读性和易用性。

           示例

class Demo:def __init__(self, name, age, sex):#__开头的变量名为 私有成员, 在类的外部不能被直接访问self.__name = nameself.age = ageself.sex = sex@property  #@property :修饰得函数,用来获取私有属性的值  类外部直接使用 obj.函数名 进行使用def value(self):return self.__name@value.setter  #@value.setter :修饰value函数,用来设置私有属性的值  类外部直接使用 obj.函数名 = 数值 进行使用def value(self, name):self.__name = nameif __name__ == '__main__':obj = Demo("盲僧", 18, "女")print(obj.age, obj.sex)#普通的访问操作私有属性obj.value = "蛮王"print(obj.value)

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

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

相关文章

nicegui学习使用

https://www.douyin.com/shipin/7283814177230178363 python轻量级高自由度web框架 - NiceGUI (6) - 知乎 python做界面,为什么我会强烈推荐nicegui 秒杀官方实现,python界面库,去掉90%事件代码的nicegui python web GUI框架-NiceGUI 教程…

redis最新版本在Windows系统上的安装

一、说明 这次安装操作主要是根据redis官网说明,一步步安装下来的,英语比较好的同学,可以直接看文章底部的超链接1,跳到官网按步操作即可。 目前redis的最新稳定版本为redis7.2。 二、Windows环境改造 Redis在Windows上不被官方…

设置Matlab2022a断点查看参数变化

Matlab2022a设置断点,查看参数变化 本文使用的是下载好的matlab2022a软件,下载加安装matlab预计1小时(百度网盘加速)。需要的安装包的评论。 安装好的matlab界面如下: 接下来,编辑一个.m文件,…

【Linux篇】Linux下利用git同步到gitee

💛不要有太大压力🧡 💛生活不是选择而是热爱🧡 💚文章目录💚 1. 克隆仓库到本地:git clone2. 添加:git add3. 提交:git commit4. 推送:git push5. 查看日志&a…

EMMC的介绍

1、emmc的含义 eMMC (Embedded Multi Media Card)是MMC协会订立、主要针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC在封装中集成了一个控制器,提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产…

linux救援模式恢复

只需要在这里的shell键入一条命令: xfs_repair -v -L /dev/dm-0 命令为修复磁盘命令 执行完成后即可重启,恢复正常。 如果输入xfs_repair -v -L /dev/dm-0 ,报 no such file or directionary 的错误,是没有这个设备。 输入jou…

李沐动手学习深度学习——3.6练习

本节直接实现了基于数学定义softmax运算的softmax函数。这可能会导致什么问题?提示:尝试计算exp(50)的大小。 可能存在超过计算机最大64位的存储,导致精度溢出,影响最终计算结果。 本节中的函数cross_entropy是根据交叉熵损失函数…

【Redis项目实战】使用Springcloud整合Redis分布式锁+RabbitMQ技术实现高并发预约管理处理系统

🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Redis实战与进阶》 本专栏带你Redis从入门到入魔 这是苏泽的个…

SAR ADC学习笔记(4)

CDAC电容阵列 一、电容失配 二、电容失配对CDAC线性度的影响 1.电容失配对DNL的影响 2.电容失配对INL的影响 三、分段结构的CDAC 四、CDAC开关切换方案&#xff1a;传统开关切换策略 第一次比较阶段&#xff1a;如果VP(1)-VN(1)<0 第一次比较阶段&#xff1a;如果VP(1)-VN…

Gemini 初体验

1 使用体验 同样需要科学上网。速度很快&#xff0c;而且还不要钱&#xff0c;据说使用太多可能被限流。对于小语种翻译效果比 GPT-4 好&#xff0c;其它还没测试。可通过 ChatBox 界面调用&#xff0c;也可使用 Python 调用。 2 使用 ChatBox 方式调用 在 build with gemin…

Linux基础命令[12]-cat

文章目录 1. cat 命令说明2. cat 命令语法3. cat 命令示例3.1 不加参数3.2 -n&#xff08;显示行号&#xff09;3.3 -E&#xff08;行尾加 $&#xff09;3.4 -s&#xff08;多行并一行&#xff09; 4. 总结 1. cat 命令说明 cat&#xff1a;用来查看文件内容&#xff0c;因为 …

STM32 学习9 中断、外部中断及定时器中断

STM32 学习9 中断、外部中断及定时器中断 一、STM32中断介绍一、STM32中断介绍1. 什么是中断&#xff1f;2. 中断在嵌入式系统中的作用和重要性3. STM32中断的概述 4. 中断的优先级4.1 中断优先级级别4.2 中断优先级分类&#xff08;1&#xff09;硬件优先级&#xff08;2&…

Effective C++ 学习笔记 条款16 成对使用new和delete时要采取相同形式

以下动作有什么错&#xff1f; std::string *stringArray new std::string[100]; // ... delete stringArray;每件事看起来都井然有序&#xff0c;使用了new&#xff0c;也搭配了对应的delete。但还是有某样东西完全错误&#xff1a;你的程序行为未定义。至少&#xff0c;str…

聊一聊ThreadLocal的原理?

1.ThreadLocal创建方式 ThreadLocal<String> threadlocal1 new ThreadLocal(); ThreadLocal<String> threadlocal2 new ThreadLocal(); ThreadLocal<String> threadlocal3 new ThreadLocal(); 2.首先介绍一下&#xff0c;ThreadLocal的原理&#xff1a; 如…

buuctf EasyBypass --不会编程的崽

buu后边的题有些确实难&#xff0c;有些其实也没那么复杂。昨天做一道异或绕过的题&#xff0c;现在还没看懂QAQ 先来一题简单的吧。哎&#xff0c;随缘更新吧 <?phphighlight_file(__FILE__);$comm1 $_GET[comm1]; $comm2 $_GET[comm2];if(preg_match("/\|\|\\|\…

开源分子对接程序rDock使用方法(1)-Docking in 3 steps

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、Docking in 3 steps 标准对接rDock 的基本对接步骤及注意事项 二、 三步对接案例Step 1. 结构文件准备Step 2. 产生对接位点Step 3. 运行分子对接3.1 检查输入文件3.2 测试-只进行打分3.3 运行…

Finetuned Multimodal Language Models Are High-Quality Image-Text Data Filters

Finetuned Multimodal Language Models Are High-Quality Image-Text Data Filters 相关链接&#xff1a;arxiv 关键字&#xff1a;Multimodal Language Models、Image-Text Data Filtering、Fine-tuning、Quality Assessment Metrics、Data Quality 摘要&#xff1a; 我们提出…

算法Day05_707.设计链表

推荐阅读 算法day01_ 27. 移除元素、977.有序数组的平方 算法day02_209.长度最小的子数组 算法day03_ 59.螺旋矩阵II 算法Day04_203.移除链表元素 目录 推荐阅读707.设计链表题目思路解法单链表解法双链表解法 707.设计链表 题目 你可以选择使用单链表或者双链表&#xff0c;设…

【翻译】零信任架构准则(二)Know your architecture

了解你的业务架构 在零信任网络模型中&#xff0c;了解你的用户&#xff0c;设备&#xff0c;服务和数据比以往任何时候都更加重要。为了使零信任架构威力发挥到最大&#xff0c;你需要了解你的架构中的每一个组件。因此&#xff0c;正确了解你的资产是最关键的一步&#xff0…

RNN实现退位减法

文章目录 前言RNNRNN架构图前向传播公式反向传播算法 用RNN实现退位减法代码变量的对应关系 总结 前言 最近深入学习了一下RNN&#xff0c;即循环神经网络。RNN是一类比较基础的神经网络&#xff0c;本文使用的是最基础、最简单的循环神经网络的形式。LSTM也是一种常见的循环神…