惬意上手python —— python中的术语及案例解析

面向对象编程

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将数据和操作数据的方法封装在一起,以对象的形式表示。在Python中,一切皆为对象,因此Python是一种面向对象的语言。

类是面向对象编程的基本概念,它是一种用户自定义的数据类型。类定义了一组属性和方法,用于描述该类的对象。例如:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef say_hello(self):print(f"Hello, my name is {self.name} and I am {self.age} years old.")

上面的代码定义了一个名为Person的类,它有两个属性(name和age)和一个方法(say_hello)。属性是类的数据成员,方法是类的函数成员。

实例

实例是类的具体化,也可以称作对象,它是类的一个具体实现。例如:

person1 = Person("Alice", 25)
person2 = Person("Bob", 30)

上面的代码创建了两个Person类的实例,分别是person1和person2。

初始化方法

初始化方法是类的特殊方法,是类的魔法方法之一,它在创建类的实例时被调用,即无序调用,自动执行。它用于初始化类的属性。例如:

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

上面的代码定义了一个名为__init__的初始化方法,它有两个参数(name和age),用于初始化Person类的属性。

魔法方法

魔法方法是Python中的特殊方法,它们以双下划线开头和结尾。它们用于实现类的特殊行为。例如:

class Person:def __init__(self, name, age):self.name = nameself.age = age# 用于且只能返回字符串def __str__(self):return f"{self.name} ({self.age})"

上面的代码定义了一个名为__str__的魔法方法,它用于返回Person类的字符串表示。

字符串方法

字符串方法是类的方法之一,它用于返回类的字符串表示。例如:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"{self.name} ({self.age})"

上面的代码定义了一个名为__str__的字符串方法,它用于返回Person类的字符串表示。

self

self是Python中的特殊变量,它用于引用类的实例。例如:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef say_hello(self):print(f"Hello, my name is {self.name} and I am {self.age} years old.")

上面的代码中,self用于引用Person类的实例。
简单说,self就是在创建对象时,对象本身。下面的代码可以直接说明:

class Student:def __init__(self, name, age):print("初始化对象")print("self的id:", id(self))self.name = nameself.age = ages1 = Student("秀", 21)
print("s1的id:", id(s1))s2 = Student("飞", 22)
print("s2的id:", id(s2))

输出结果:
在这里插入图片描述
上面的代码分别打印了self和实例的id,你会发现执行了两次,那是因为每创建一个对象,就会调用一次对应的类。并且self的id和实例的id时一模一样的!

数据、属性、操作、行为

在面向对象编程中,数据是类的属性,操作是类的方法,行为是类的特殊行为。例如:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef say_hello(self):print(f"Hello, my name is {self.name} and I am {self.age} years old.")

上面的代码中,name和age是Person类的数据,say_hello是Person类的操作,__str__是Person类的行为。

父类、基类、超类

父类、基类、超类是面向对象编程中的术语,它们用于描述类之间的关系。父类是一个类,它被其他类继承。子类是一个类,它继承自另一个类。基类和超类是父类的同义词。

子类、派生类

子类、派生类是面向对象编程中的术语,它们用于描述继承关系。子类是一个类,它继承自另一个类。派生类是子类的同义词。
并且子类可以继承父类的属性和方法:

class Animal:def __init__(self, name):self.name = namedef speak(self):print("汪汪")class Dog(Animal):def __init__(self, name, age):Animal.__init__(self, name)self.age = agedef eat(self):print("啃骨头")class DogChild(Dog):def __init__(self, name, age, color):Dog.__init__(self, name, age)self.color = colordog = DogChild("小汪汪", 2, "black")
dog.speak()
dog.eat()

上面的代码DogChild类继承了Dog类,而Dog类继承Animal类,并且你会发现你会发现创建的DogChild的实例可以使用DogChild类中没有声明的speak和eat方法。

多态

多态是面向对象编程中的术语,它用于描述同一操作作用于不同的对象上时,产生不同的结果。在Python中,多态是一种自然而然的现象,因为Python是一种动态类型语言。
简单说就是同一函数可以被不同类型的不同对象调用。

重载多态

重载多态是面向对象编程中的术语,它用于描述同一操作作用于不同类型的参数时,产生不同的结果。在Python中,重载多态是一种自然而然的现象,因为Python是一种动态类型语言。
也就是同一函数有不同的参数。

重写多态

重写多态是面向对象编程中的术语,它用于描述子类重写父类方法的现象。在Python中,重写多态是一种自然而然的现象,因为Python是一种动态类型语言。

实例属性

实例属性是类的属性之一,它是实例的数据成员。例如:

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

上面的代码中,name和age是Person类的实例属性。

实例方法

实例方法是类的方法之一,它是实例的函数成员。例如:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef say_hello(self):print(f"Hello, my name is {self.name} and I am {self.age} years old.")

上面的代码中,say_hello是Person类的实例方法。

类属性

类属性是类的属性之一,它是类的数据成员。例如:

class Person:count = 0def __init__(self, name, age):self.name = nameself.age = agePerson.count += 1

上面的代码中,count是Person类的类属性。

类方法

类方法是类的方法之一,它是类的函数成员。例如:

class Person:count = 0def __init__(self, name, age):self.name = nameself.age = agePerson.count += 1@classmethoddef get_count(cls):return cls.count

上面的代码中,get_count是Person类的类方法,需要用@修饰,而@classmethod就代表类方法。

静态方法

静态方法是类的方法之一,它是类的函数成员。它与类和实例无关,因此可以在不创建实例的情况下调用。例如:

class Math:@staticmethoddef add(x, y):return x + y

上面的代码中,add是Math类的静态方法。你会发现add函数前面有一个**@staticmethod**,其实就是装饰器的原理。

🆗,文章到此结束,如果觉得对你有帮助,可以给个关注,持续更新中🌹🌹🌹
在这里插入图片描述

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

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

相关文章

Activiti工作流引擎

一、工作流介绍: 1.1 概念: 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或…

nodejs下载介绍

前言 在我们开发项目的时候使用的是这种对应的前后端分离的形式,各个开发人员各司其职来完成整个项目的构建 但是实际开发的话前端也是分成了很多部分比如下图 那么我们就用到了对应的快捷生成一个前端项目的工具,nodejs携带的脚手架 下载步骤 大家可…

QT问题记录:Qt报错msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set

方法一:清空构建目录 重新设置一个新的构建目录(影子目录),或者清空当前目录的所有文件即可 方法二:修改配置文件(不推荐) 网上大部分的解决方案都是这个,直接打开找到并文件msvc…

父元素flex:1 高度却被子元素撑开的问题

问题 当父元素设置了flex: 1; 的情况下,想在其中子元素超出父元素高度的情况下,产生滚动条,在父元素区域滚动。由于子元素高度不固定,故父元素设置为display: flex; flex-direction: column; 子元素设置flex: 1; overflow: auto;…

java中的final关键字

一在哪些情况下使用final修饰: (1)当不希望类被继承时,可以用final修饰; (2)当不希望父类的某个方法被子类覆盖/重写时,可以用final关键字修饰; (3&#x…

Unity触发检测Trigger踩坑合集

正常状态 绿色方块:刚体碰撞盒检测触发碰撞脚本 蓝色方块:碰撞盒 检测脚本: 正常进出: 踩坑1 绿色方块:刚体碰撞盒检测触发碰撞脚本 蓝色方块:碰撞盒 保持绿色和蓝色方块的接触 对蓝色方块&#xff1a…

如何使用Python实现WebScoket

大家好,后端开发领域迅速发展,需要满足今天应用程序多样化需求的协议。默认的HTTP协议设计用于无状态和短生命周期请求,但在需要实时交互的场景中(如实时信令、聊天应用和协同编辑),它显然不够。 为了解决…

Python自动化测试框架整理,搭建框架看这篇就够了。。

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,薪资嘎嘎涨 什么是测试框架呢? 框架是一组准则,一个体系结构,遵循这些…

PHP微信UI在线聊天系统源码 客服私有即时通讯系统

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) DuckChat是一套完整的私有即时通讯解决方案,包含服务器端程序和各种客户端程序(包括iOS、Android、PC等)。通过Duck…

深入了解RabbitMQ:构建高效的消息队列系统

目录 1、RabbitMQ简介 1.1 什么是消息队列系统 1.2 RabbitMQ的概述 1.3 RabbitMQ的优势和适用场景

python查询xml类别

第一章 导包 import os from xml.etree.ElementTree import ElementTree第二章 存储类别 # 定义一个空集合用于存储类别 classes set()第三章 遍历所有XML文件 # 遍历指定目录下的所有XML文件 for filename in os.listdir(/home/li/PycharmProjects/Annotations):if filena…

kubeadm安装K8S_v1.28.x容器使用docker

一.环境部署 1.1 基础环境配置(只有1台服务器,作为masrer,也作为node使用) [rootecs-cf5e ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootecs-cf5e ~]# uname -a Linux ecs-cf5e 3.10.0-11…

[ECE] Error Codes: Parity Bit and Cyclic Redundancy Check

当我们在数字通信中传输数据时,可能会发生错误,而错误检测码(Error Codes)是一种用于检测和纠正这些错误的技术。两种常见的错误检测码是奇偶校验位(Parity Bit)和循环冗余检测(Cyclic Redundan…

LRU缓存(Leetcode146)

例题: 分析: 题目要求函数get和put要达到O(1)的时间复杂度,可以用 hashMap 来实现,因为要满足逐出最久未使用的元素的一个效果,还需要配合一个双向链表来共同实现。链表中的节点为一组key-value。 我们可以用双向链表来…

分割头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…

FileZilla 的安装与使用

目录 一. FileZilla 是什么二. FileZilla 的安装1. 下载 FileZilla2. 安装 三. FileZilla 的使用 一. FileZilla 是什么 FileZilla 是一个免费的开源 FTP(文件传输协议)客户端软件,用于在计算机之间传输文件。它提供了一个直观的用户界面&am…

SV-9032 机架式ip网络采播器

SV-9032是深圳锐科达电子有限公司的一款机架式网络采播器,具有10/100M以太网接口,后面板上有一组AUX音源输入和一组6.35mm接口的麦克风输入,可以直接连接音源输出设备或麦克风,将采集音源编码后发送至网络播放终端上。同时还具有三…

数据结构之生成树及最小生成树

数据结构之生成树及最小生成树 1、生成树概念2、最小生成树 数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所…

Springboot+vue的健身房管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的健身房管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的健身房管理系统,采用M(model&#xf…

【SparkML系列2】DataSource读取图片数据

DataSource(数据源) 在本节中,我们将介绍如何在机器学习中使用数据源加载数据。除了一些通用的数据源,如 Parquet、CSV、JSON 和 JDBC 外,我们还提供了一些专门用于机器学习的数据源。 ###Image data source(图像数据源&#xf…