python面向对象

面向对象概述

python是一门面向对象语言,面向对象的三大特性,封装、继承、多态,python支持多继承,这里与java语言等还是有区别的

创建类关键字 class ,类中包含属性和方法,通过类创建对象

python的类和对象

创建类的关键字为class 

创建对象为 对象名=类名() 

调用属性和方法 对象名.xxx


class Person:name = Nonegender=Noneage=Nonedef eat(self):print(f"{self.name}这个人在吃饭")def __init__(self,name,gender,age):self.name =nameself.gender=genderself.age=agezhangsan = Person("zhangsan","男",18)zhangsan.eat()"""
输出结果:
zhangsan这个人在吃饭
"""

 类中成员方法创建第一个参数为self,指代本类对象,调用的时候python自动传入

    def eat(self):print(f"{self.name}这个人在吃饭")

__init__(self,...) 此类方法为构造方法,类初始化的时候自动调用,与java类似

    def __init__(self,name,gender,age):self.name =nameself.gender=genderself.age=age

创建对象 

zhangsan = Person("zhangsan","男",18)

调用方法

zhangsan.eat()

私有成员变量和方法的定义,前边加两个下划线,即__xxx,对象不可以调用私有变量和方法


class Person:# 私房钱__money = 10000#通过公有方法访问私有成员def getMoney(self):return self.__money;#私有方法def __heigt(self):print("175cm")zhangsan = Person()zhangsan.getMoney()

python的类方法

用@classmecthod装饰符来表示,类方法只能访问类变量,不能访问实例变量

class Person:name = "lisi"def __init__(self,name,age):self.name=nameself.age=age# 类方法,只能访问 name = lisi的成员变量,通过构造方法传进来的会报错@classmethoddef getName(self):print(f"姓名是:{self.name}")zhangsan = Person("zhagnsan",13)zhangsan.getName()"""
输出结果:姓名是:lisi
"""

python的静态方法

通过@staticmethod装饰器来表示,该方法可以把@staticmethod下面的函数和所属的类截断,这个函数就不属于这个类,也没有类的属性,只不过要通过类名的方式调用

class Person:def __init__(self,name,age):self.name=nameself.age=age# 静态方法,类名调用@staticmethoddef testStatic():print("我是静态方法")Person.testStatic()
zhangsan = Person("zhangsan",18)
zhangsan.testStatic()"""输出结果我是静态方法我是静态方法
"""

 python的属性方法

用@property装饰符表示,把一个方法变成一个静态属性,然后直接把它作为属性调用

class Person:@propertydef propertiesMethod(self):print("我是属性方法")a = Person()
# 如果a.propertiesMethod()会报错
a.propertiesMethod"""
输出结果
我是属性方法
"""

python的魔术方法 

方法名说明
__init__ 类似构造器,在类生成对象后就会被执行
__del__在对象消亡时执行
__call__ 在类的对象被执行时被调用
__str__ 在对象被str()包裹的时候会被执行
__int__在对象被int()包裹的时候会被执行
__add__ 在两个对象相加的时候,调用第一个对象的__add__方法,可以将第二个对象传递进来
__dict__ 这个方法是以字典的形式列出类或对象中所有成员
__iter__ 类对如果想变成一个可迭代的对象,那么对象中必须要有__iter__方法,并且这个方法返回一个迭代器

更多魔术方法的使用请参考:传送门

python的继承 

python中的继承通过在类名后边写(xxx),python支持多继承

注意:父类和子类都重新定义了构造函数init()时,在进行子类实例化的时候,子类的构造方法不会自动调用父类的构造器,必须在子类中显示调用

class Student:def myName(self):print("我叫zhangsan")class Person(Student):def myAge(self):print("我18岁")a = Person()
a.myName()
a.myAge()"""
输出结果
我叫zhangsan
我18岁
"""

python的子类调用父类

python调用父类的成员变量和方法有两种方式

1、使用父类名.[成员变量|成员方法()]

2、super().[成员变量|成员方法()]

class Fu():name ="zhangsan"def test(self):print(f"名称为{self.name}")class Zi(Fu):def excuteFu(self):print(Fu.name)super().test()Zi().excuteFu()"""
输出结果
zhangsan
名称为zhangsan
"""

python的多态

多态性是面向对象重要的特征之一。“多态”是指对象可以表现出多种形态。经典例子例如:猫 狗 都属于动物,它们都有叫 动等行为,但是叫的方式与动的方式各不相同


def start(obj):obj.speak()class Animail():def speak(self):print("动物在叫")class Dog(Animail):def speak(self):print("狗在叫")class Cat(Animail):def speak(self):print("猫在叫")Dog().speak()
Cat().speak()
start(Dog())
start(Cat())"""
输出结果
狗在叫
猫在叫
狗在叫
猫在叫
"""

python的接口

python中没有interface关键字,python中的接口也就是抽象类

定义方式:

        1、类声明加上metaclass=abc.ABCMeta

        2、定义抽象方法,加注解@abc.abstractmethod,内容为pass,表示为空

注意事项:

        1、抽象类不能实例化对象

        2、继承实现抽象类的类必须实现所有抽象方法

        3、抽象类可以定义实际方法

import abcclass AbsTest(metaclass=abc.ABCMeta):@abc.abstractmethoddef test(self):passdef test1(self):print("444")class AbsTestImpl(AbsTest):def show(self):print("555")def test(self):print("666")AbsTestImpl().test()
AbsTestImpl().test1()"""
输出结果
666
444
"""

python的异常处理

异常是Python对象,当Python无法正常处理程序时就会抛出一个异常。一旦Python脚本发生异常,程序需要捕获并处理它,否则程序会终止执行,与其他面向对象语言的异常处理类似,比如java

Python中所有异常类的根类是BaseException类,它们都是BaseException的直接或间接子类。大部分常规异常类的基类是Exception的子类

python的异常处理语法 

处理异常的语法与其他语言类似 

try:

        可能出现异常的代码

expect Exception as 别名:

        异常处理方法

else:

        没有出现异常

finally:

        一定会执行的代码

try:# 打开不存在的文件open("test.txt","r",encoding="UTF-8")
except Exception as e:print("出现异常")
else:print("123")
finally:print("一定会执行")"""
输出结果
出现异常
一定会执行
"""

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

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

相关文章

组合模式——树形结构的处理

1、简介 1.1、概述 树形结构在软件中随处可见,例如操作系统中的目录结构、应用软件中的菜单、办公系统中的公司组织结构等。如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题。组合模式通过一种巧妙的设计方案使得用户可以一致性地处理整个树形…

小目标检测(1)——大恒(DaHeng)相机操作与控制编程

文章目录 引言正文相关开发库的介绍编程准备配置引用头文件GalaxyIncludes.h配置lib文件 具体编程过程初始化和反初始化枚举设备开关设备 属性控制属性控制器种类 图像采集控制和图像处理采单帧回调采集图像处理流对象属性控制 获取设备事件获取掉线事件通知 样例程序分析补充&…

转机来了,国内全新芯片技术取得突破,关键驱动引擎开始提速

芯片技术转机来了 我们都知道,芯片技术是现代信息技术的基石,它驱动着计算机、智能手机、物联网设备等各类电子设备的运行。 科技的不断进步,芯片技术也在不断演进。 从传统的集成电路到现代的微处理器和系统芯片,其计算能力和能…

dubbo配置---重试与版本号

1、重试次数 失败自动切换,当出现失败,重试其它服务器,但重试会带来更长延迟。可通过 retries“2”{默认} 来设置重试次数(不含第一次)。 (1)在调用端,Reference注解添加属性 retries,设置重试…

Mysql5.8 Windows安装

1、下载安装包 MySQL :: Download MySQL Community Server 下载后解压到某个文件夹 2、配置环境变量 3.创建my.ini文件 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirE:\\software\\mysql\\mysql-8.0.11-winx64 # 切记此处一定要用双斜杠\\,…

【CSS】圆形放大的hover效果

效果 index.html <!DOCTYPE html> <html><head><title> Document </title><link type"text/css" rel"styleSheet" href"index.css" /></head><body><div class"avatar"></…

Pytorch基础

文章目录 一、Pytorch简介二、安装2.1 安装GPU环境2.2 安装Pytorch2.3 测试 三、Tensor3.1 Tensor创建3.1.1 torch.tensor() && torch.tensor([])3.1.2 torch.randn && torch.randperm3.1.3 torch.range(begin,end,step)3.1.4 指定numpy 3.2 Tensor运算3.2.1 A…

113、单例Bean是单例模式吗?

单例Bean是单例模式吗? 通常来说,单例模式是指在一个JVM中,一个类只能构造出来一个对象,有很多方法来实现单例模式,比如懒汉模式,但是我们通常讲的单例模式有一个前提条件就是规定在一个JVM中,那如果要在两个JVM中保证单例呢?那可能就要用分布式锁这些技术,这里的重点…

iOS开发-实现热门话题标签tag显示控件

iOS开发-实现热门话题标签tag显示控件 话题标签tag显示非常常见&#xff0c;如选择你的兴趣&#xff0c;选择关注的群&#xff0c;超话&#xff0c;话题等等。 一、效果图 二、实现代码 由于显示的是在列表中&#xff0c;这里整体控件是放在UITableViewCell中的。 2.1 标签…

使用 AntV X6 + vue 实现单线流程图

使用 AntV X6 vue 实现单线流程图 X6 是 AntV 旗下的图编辑引擎&#xff0c;提供了一系列开箱即用的交互组件和简单易用的节点定制能力&#xff0c;方便我们快速搭建 DAG 图、ER 图、流程图等应用。 官方文档 安装 yarn add antv/x61.34.6Tips&#xff1a; 目前 X6 有 1.x…

二叉树迭代遍历

PS:以下代码均为C实现 1.二叉树前序遍历 力扣 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 class Solution { public:vector<int> preorderTraversal(TreeNode* root) {stack<TreeNode*> st;vector<int> str;TreeNode* curroot;whil…

python面试题【题目+答案】

最近遇到了一份python的面试题&#xff0c;题目比较简单&#xff0c;时间控制在一个小时之内。以下是面试的题目跟答案&#xff0c;答案不代表最优解&#xff0c;只是当时所想到的一些思路&#xff0c;接下来将分享给大家。 目录 1. 给出下面打印结果 2.字典如何删除键、如何…

PySpark介绍与安装

Spark是什么 定义&#xff1a;Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎。 简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器集群&#xff0c;计算TB、…

无涯教程-Lua - for语句函数

for 循环是一种重复控制结构&#xff0c;可让您有效地编写需要执行特定次数的循环。 for loop - 语法 Lua编程语言中 for 循环的语法如下- for init,max/min value, increment dostatement(s) end 这是 for 循环中的控制流程- 首先执行 init 步骤&#xff0c;并且仅执行一…

NO4 实验四:生成Web工程

1、说明 使用 mvn archetype&#xff1a;generate 命令生成 Web 工程时&#xff0c;需要使用一个专门的 archetype。这个专门生成 Web 工程骨架的 archetype 可以参照官网看到它的用法&#xff1a; 2、操作 注意&#xff1a;如果在上一个工程的目录下执行 mvn archetype&…

spring-bean配置信息重用(继承)和bean创建顺序是什么以及bean 对象的单例和多例讲解

&#x1f600;前言 本章是spring基于XML 配置bean系类中第5篇讲解spring-bean配置信息重用(继承)和bean创建顺序是什么以及bean 对象的单例和多例讲解 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希…

【多线程系列-04】深入理解java中线程间的通信机制

多线程系列整体栏目 内容链接地址【一】深入理解进程、线程和CPU之间的关系https://blog.csdn.net/zhenghuishengq/article/details/131714191【二】java创建线程的方式到底有几种&#xff1f;(详解)https://blog.csdn.net/zhenghuishengq/article/details/127968166【三】深入…

Kafka的零拷贝

传统的IO模型 如果要把磁盘中的某个文件发送到远程服务器需要经历以下几个步骤 (1) 从磁盘中读取文件的内容&#xff0c;然后拷贝到内核缓冲区 (2) CPU把内核缓冲区的数据赋值到用户空间的缓冲区 (3) 在用户程序中调用write方法&#xff0c;把用户缓冲区的数据拷贝到内核下面…

Balanced Multimodal Learning via On-the-fly Gradient Modulation

摘要 多模态学习通过整合不同的感官&#xff0c;有助于全面理解世界。因此&#xff0c;多种输入模式有望提高模型的性能&#xff0c;但我们实际上发现&#xff0c;即使多模态模型优于其单模态模型&#xff0c;它们也没有得到充分利用。具体地说&#xff0c;在本文中&#xff0…

【雕爷学编程】MicroPython动手做(27)——物联网之掌控板小程序

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…