Python编程技巧 – 对象和类

Python编程技巧 – 对象和类

Python Programming Skills – Object and Class

Python是一种面向对象的高级程序语言。

本文简要介绍用Python如何实现面向对象,对象和类的声明及使用,以及面向对象的特征,及其如何使用属性和方法的介绍;并且,继承将是重用类和对象的不错选择。

0. 面向对象

在接触面向对象编程之前,人们在生活中几乎无处不在地和对象接触;只不过,人们心中并不知道什么是对象,没有将自然界的物体和对象关联起来。

1) 自然界的对象

对象就是可以被感知、触摸的实体。在自然界里,首先看到的就是田野,山川,河流,房屋,人们等,这些都是原始对象。

每个IT人员用的电脑、配件,每个家庭的房间及家具,每个社区的体育设施,以及每条道路的标志、围栏和交通灯等等,也都是对象。

2) 软件开发的对象

编程或者软件开发过程中的对象定义没有实质的差异;尽管软件的对象不可触摸,但在程序流程和逻辑方面,却实在在地担任着重要角色。

这些对象,往往跟数据打交道,它们是数据与相关行为的集合。

3) 面向对象

Python作为编程语言,它在被开发的初期,就已经被设计有对象的特征,因此,它可以用面向对象的编程方法来解决很多实际问题。

所谓 面向 就是指向的意思,因此,面向对象其实就是功能性地指向对象,即通过数据和行为,来描述一系列相互作用的对象。

经历了面向对象的分析、设计和编程,也就对其流程有了闭环的操作。这就是面向对象程序设计的过程。

1. 对象和类

既然对象是数据和行为的集合,那么,如何定义和区分不同对象的类型呢?

人们用肉眼一秒钟就能分辨出苹果(Apple)和橘子(Orange)的区别,是因为他们的外形(shape),颜色(color)都不同。因此,除了这两个对象的名称不一样,它们的自身属性也不一样;此外,还有气味(smell)和味道(taste)的属性也不一样。

所以,定义这两个对象到编程语言,最初就有了基本概念,可以以名称(对象名)和特征(属性)来区分。

仔细想想,前面提到苹果和橘子是一个大的门类。具体到哪个苹果,或者哪个橘子,它们又会有着细节的差异,这就引入了类和对象的概念。

苹果这一大类Apple,就是一个编程所用的类(class), 而具体的哪个苹果,例如:这个苹果(theApple)就是一个对象,因为它从一个种类具体化到一个物体了;同时,这个实际的对象theApple也具有自己的属性。

由此可以引申出,类其实是对象的蓝本(blueprint), 而对象则是一个个具体的实例一个类可以有很多个对象

2. Python对象

1) 创建Python类

类似Apple的例子,苹果可以被定义为一个类,在Python语言里,可能编写的最简单的类的代码如下:

class Apple:
	pass

类的定义,以class关键字开始,接着是类的名称(由用户自己命名),最后以冒号结束这个语句;类里面的代码可能有很多种,但还不确定,因此,用pass代替。

Python的代码块不用大括号{ }分隔,因此在下一句必须缩进到合适的位置(实际编程语句开头可以有2个或者4个空格,这都能被解释器接受)

2) 类的实例化

既然创建了类,那么如何变成具体的对象呢?这需要类的实例化;也就是将类具体到一个实际的对象;创建类的实例,需要在类名称后加一对括号( )来进行,这就说明产生了一个新的实例,也就是一个新的对象。

Apple()

类的实例输出,也就等同于对象的输出;这需要将实例赋给一个变量A,从而打印输出,

A = Apple()
print(A)

由于苹果有天生的特性(即属性),因此,我们将属性添加到类,再打印输出属性,看有什么效果。代码如下:

class Apple:
    color = 'red'    
    smell = 'well'
    taste = 'sweet'
print("Type of Apple is", Apple)
print("The Apple smells", Apple().smell)
print("And the Apple tastes", Apple().taste)

运行结果如下图:
在这里插入图片描述
运行成功!

尽管该类也定义了color这个颜色属性而并没有引用,但是这并不妨碍这个类具有了鲜明的面向对象的特征。

以上代码块中,print函数打印输出Apple对象的类别class; 之后依次输出该对象实例的smell, taste(Apple类中定义的)属性值。

3. 添加属性

当我们创建了一个基本类后,但是没有什么实际用途;它看起来既没有任何数据,也不能做什么事,这时候就需要给它添加属性。

添加属性的方法,是通过点标记法,在对象(类的实例)后面设定属性。

如下示例,创建一个点坐标类(Point),然后给它添加属性,即坐标x, 坐标y.

class Point:
    pass
p1 = Point()
p2 = Point()

p1.x = 5
p1.y = 4

p2.x = 3
p2.y = 6

print(p1.x, p1.y)
print(p2.x, p2.y)

执行结果如下图所示:
在这里插入图片描述
以上代码创建了空的Point类,没有数据和行为;然后创建了两个实例p1, p2, 并给它们赋值x, y, 即确定其二维坐标中的点的定位。

其中,p1.x, p1.y, p2.x, p2.y都采用了点标记法,就是用对象(也就是实例)加点再加属性来标记,将特定的值赋给它们,使得这些属性值具有实际意义。

当然,这些被赋予的值,可以是Python的基本类型、内置数据类型或者其它的对象,甚至可以是一个函数或另一个类。它的用途很广泛。

4. 添加方法

一个类,除了具有相应的属性外,还有一些可用的方法。添加有效的方法,可以使类和对象实例的使用,变得有趣和轻松;同时,也保证了属性相对安全,不至于直接被访问。

如同下面的例子,类Student要定义学生类,然后用def关键字添加它的方法(函数),就是studyCourse,用来表示学习课程;要传递一个参数c作为具体课程给该方法(或者函数),传递的方法是用input函数输入字符串。

示例代码如下:

class Student:
   def studyCourse(c):
       c = input("Enter the course: ")
       return f"Hi, student! You are studying {c}."
   
student1 = Student()
print(student1.studyCourse())

等类和方法完成后,创建一个Student类的实例,就是student1, 最后用student1这个实例,使用点标记法调用studyCourse()方法,完成这次输入输出课程的任务。

执行结果如下图所示:
在这里插入图片描述

5. 继承

类创建完毕后,可以生成无限个对象实例,只要用户愿意。

但是,如果有新的特性产生,需要创建类似的对象实例,又不想重新开始,该怎么办呢?- 创建该类的子类,来继承它,是一种不错的选择。

例如,通过Student类创建小学生类Pupil,此时,Pupil类继承了Student类。

class Student:   
   def studyCourse(n):
       c = input("Enter the course: ")
       return f"Hi, student! You are studying {c}."

class Pupil(Student):
    pass

student1 = Student()
print(student1.studyCourse())

pupil1 = Pupil()
print(pupil1.studyCourse())

执行结果如下图所示:
在这里插入图片描述
从上面的例子不难看出,Pupil继承其父类Student,只需要在参数括号里添加父类的名称即可,即便类代码块没有任何内容,只有一行pass; 它也可以通过Pupil的对象实例,来调用所继承Student的类的对象的方法studyCourse(), 打印输出课程。

看起来轻而易举!

6. 小结

以上对Python类和对象的产生做了初步介绍,并展示了添加属性、方法的实例;最后,告诉大家,Python类还能够继承,从而发挥其父类的功能,去使用而不必重写相应的方法。

关于Python,还有相当多的话题,这里暂时告一段落。

技术好文不断推出,敬请关注。

喜欢就点赞哈。😊

相关阅读:

  1. Python编程技巧 - 转换二进制、十六机制和八进制的函数
  2. Python编程技巧 - 函数入门
  3. 安装最新版Visual Studio Code来开发Python应用程序
  4. 2023最新版Python 3.12.0安装使用指南
  5. Python编程技巧 - 使用列表(List)

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

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

相关文章

Windows上搭建一个网站(基本生产环境)

前言 本博客记录的是Windows上一次网站搭建的过程,主要是在前端采用的是React,后端采用的是Flask,记录一下生产版本搭建流程和坑点,供有缘人一起进步,当然本博客还存在很多不足。 前端项目构建生产版本 以React为例…

IPv4数据报格式

IPv4是IP协议的第四个版本(版本1-3和版本5都未曾使用过)IP地址不能反映任何有关主机位置的地理信息以前还有个逆地址解析协议RAPR(Reverse APR),它的作用是使只知道自己MAC地址的主机能通过RAPR找到其IP地址,而现在的DHCP(Dynamic Host Configuration Pr…

智慧城市指挥中心,大屏幕究竟有什么用?

目前很多地区有在兴建智慧城市的项目,其城市指挥中心内一般都建有一张巨大的屏幕,这张屏幕究竟有什么用?是否可以用普通的电脑显示器进行代替呢? 智慧城市指挥中心内的巨大屏幕是智慧城市项目中的重要组成部分,其作用不…

回溯算法(3)--n皇后问题及回溯法相关习题

一、n皇后问题 1、概述 n皇后要求在一个nn的棋盘上放置n个皇后,使得他们彼此不受攻击,皇后可以攻击同一行、同一列、同一斜线上的敌人,所以n皇后问题要求寻找在棋盘上放置这n个皇后的方案,使得任意两个皇后都不在同一行、同一列或…

​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】 课本里章节里所有蓝色字体的思维导图

带您识别RJ45网口连接器/网口插座口的LED灯的平脚/斜脚,带弹/不带弹细节区分

Hqst华强盛(盈盛电子)导读:网口连接器,网口插座,也叫网口母座,因为产品规格众多,常常因为细小差别,耽误工程设计级或者生产排期延误,今天就带大家一起来认识下平脚RJ45网口连接器/网口插座与斜脚…

算法设计与分析 | 分治棋盘

题目 在一个2^k * 2^k个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格&#xff0…

【动态规划】求解编辑距离问题

目录 问题描述递推关系运行实例时空复杂度优化Hirschberg 算法 问题描述 编辑距离问题是求解将⼀个字符串转换为另⼀个字符串所需的插⼊、删除、替换的最小次数。 C O M M O M → s u b C O M M U M → s u b C O M M U N → i n s C O M M U N E \mathbb{COMMOM} \overset{sub…

macbook ntfs能读不能复制 c盘ntfs拒绝访问怎么解决

如果你是一位Mac用户,你可能会遇到这样的问题:你的Mac能够读取NTFS格式的移动硬盘或U盘,但是不能往里面复制或者修改文件。或者,你的Windows电脑出现了C盘NTFS拒绝访问的错误,导致你无法正常使用系统。这些问题都是由于…

【vue2绘制echarts环状图】vue2使用echarts绘制环状图

效果图&#xff1a; 鼠标悬浮的效果图&#xff1a; 1&#xff1a;安装echarts yarn add echarts5.3.2 或 npm install echarts5.3.2 --save2.局部引入使用 在vue页面引入 <template><div><divref"myChart"style"{width: 400px;height: 350…

VMware Workstation Pro 12 ubuntu 20.04 突然奔溃,重新打开后导致win11系统蓝屏问题

1、虚拟机在执行一个程序时候&#xff0c;突然导致系统win11蓝屏 2、重新打开提示磁盘打开异常&#xff0c;网络搜索发现要删除磁盘lock文件&#xff0c;删除后&#xff0c;重启过程中还是会报各种异常 后来把所有的临时文件都删除了&#xff0c;就可以了 临时文件&#xff1…

如何去开发一个springboot starter

如何去开发一个springboot starter 我们在平时用 Java 开发的时候&#xff0c;在 pom.xml 文件中引入一个依赖就可以很方便的使用了&#xff0c;但是你们知道这是如何实现的吗。 现在我们就来解决这一个问题&#xff01; 创建 SpringBoot 项目 首先我们要做的就是把你想要给别…

wpf devexpress 开始点

此教程示范如何创建registration form和DevExpress WPF Data Editors 开始点 此项目源码 这个解决方案包含几个项目-每一个项目对应一个教程 RegistrationForm.BaseProject项目是基于工作的解决方案。项目包含三个视图&#xff1a;MainView&#xff0c;RegistraionView&…

Os-ByteSec

Os-ByteSec 一、主机发现和端口扫描 主机发现&#xff0c;靶机地址192.168.80.144 端口扫描&#xff0c;开放了80、139、445、2525端口 二、信息收集 访问80端口 路径扫描 dirsearch -u "http://192.168.80.144/" -e *访问扫描出来的路径&#xff0c;没有发现…

IO流-序列化流

一&#xff0c;序列化&#xff08;把java对象写到对象中去&#xff09; 二&#xff0c; Object OutputStream(对象字节输出流) 三&#xff0c;案例 package BigDecimal;import java.io.FileOutputStream; import java.io.ObjectOutputStream;public class Main {public static…

​软考-高级-系统架构设计师教程(清华第2版)【第14章 云原生架构设计理论与实践(P496~526)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第14章 云原生架构设计理论与实践&#xff08;P496~526&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

​软考-高级-系统架构设计师教程(清华第2版)【第13章 层次式架构设计理论与实践(P466~495)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第13章 层次式架构设计理论与实践&#xff08;P466~495&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

数据库的分库分表 详解

前言 一个系统随着用户量上升&#xff0c;产生的数据也越来越多&#xff0c;到达一定程度&#xff0c;数据库就会产生瓶颈。 首先单机数据库所能承载的连接数&#xff0c;io和吞吐量都是有限的&#xff0c;并发量上来数据库就渐渐顶不住了。 如果单表的数据量过大&#xff0…

阿里巴巴java开发手册-编程规约

编程规约 命名风格常量定义代码格式OOP 规约日期时间集合处理并发处理控制语句注释规约前后端规约其他 命名风格 【强制】代码中的命名均不能以下划线或美元符号开始&#xff0c;也不能以下划线或美元符号结束。 反例&#xff1a;_name / name / n a m e / n a m e / n a m e…

腾讯云服务器租用价格,腾讯云服务器价格流量怎么算?

首先&#xff0c;让我们来看看腾讯云服务器租用价格。根据您的需求不同&#xff0c;腾讯云提供了多种不同的配置选项&#xff0c;从轻量级应用服务器到高性能的GPU服务器&#xff0c;都可以满足您的需求。以下是一些常见的腾讯云服务器租用价格&#xff1a; 一、腾讯云服务器租…