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 = 4p2.x = 3
p2.y = 6print(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):passstudent1 = 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)

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

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

相关文章

为什么我学了几天 STM32 感觉一脸茫然?

为什么我学了几天 STM32 感觉一脸茫然? 刷到过b站的zhihui君吧,去看他的回答,他的第一块开发板是arduino,这种级别的人物,在国内也是大神级了,最早学电子方向也是用的arduino。最近很多小伙伴找我&#xff…

wpf devexpress绑定grid到总计和分组统计

此主题描述了如何在gridcontrol中的视图模型和显示定义总计和分组统计 在视图模型中指定统计 1、创建 SummaryItemType 枚举你想要在GridControl中显示的统计类型: public enum SummaryItemType { Max, Count, None } 2、创建一个grid统计描述类 public class S…

从零开始:抖音酒店景区小程序开发指南

为了满足用户多样化的需求,开发一款抖音酒店景区小程序成为了业界的一个新兴趋势。在这篇文章中,我们将探讨如何开发一款引人注目的抖音风格的酒店景区小程序。 一、抖音风格的设计理念 在设计酒店景区小程序时,我们需要融入抖音的设计理念。…

Java对象、类、数据类型、变量类型

一、Java对象和类: 对象是类的一个实例,有状态和行为。类是一个模版,描述一类对象的行为和状态。对象的状态就是属性,行为通过方法体现。方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。 一个类可以包…

客户端性能优化实践

背景 双十一大促时,客户客服那边反馈商品信息加载卡顿,在不断有订单咨询时,甚至出现了商品信息一直处于加载状态的情况,显然,在这种高峰期接待客户时,是没法进行正常的接待工作的。 起初,页面一…

【代码随想录】算法训练计划24

回溯模板: 1、77. 组合 题目: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 思路: 很经典的回溯,也是回溯中模板的经典应用,因而是回溯中的简单题…

观测云助力跨境电商大幅提高加载性能

话不多说,先上结果 什么是用户体验 用户体验基本包含访问网站的性能、可用性和正确性。通俗的讲,就是一把通过用户访问测量【设计者】意图的尺子。 用户体验的基本价值 如果正确实施了终端用户体验,可以第一时间发现,确认影响了…

python 对图像进行聚类分析

import cv2 import numpy as np from sklearn.cluster import KMeans import time# 中文路径读取 def cv_imread(filePath, cv2_falgcv2.COLOR_BGR2RGB): cv_img cv2.imdecode(np.fromfile(filePath, dtypenp.uint8), cv2_falg) return cv_img# 自定义装饰器计算时间 def…

【C++】泛型编程 ⑥ ( 类模板 | 类模板语法 | 代码示例 )

文章目录 一、类模板1、类模板引入2、声明类模板语法3、调用类模板语法 二、代码示例 - 类模板1、代码示例2、执行结果 一、类模板 1、类模板引入 类模板 与 函数模板 的 作用类似 , 当 多个类 功能相同 , 只是数据类型不同 , 此时可以 定义一个类模板 代替 定义多个类 ; 借助…

shopee跨境选品工具——知虾,助您精准选品和科学运营

在如今的电商时代,shopee跨境选品是每个卖家都面临的重要任务。而Shopee作为一家知名的跨境电商平台,为卖家提供了一系列有用的工具和功能来帮助他们进行精准选品和科学运营。其中,知虾作为Shopee的大数据采集及分析平台,为卖家提…

Java多线程下使用TransactionTemplate控制事务

简介 本文展示了在Java的多线程环境下使用Spring的TransactionTemplate控制事务的提交与回滚,当任何一个子线程出现异常时,所有子线程都将回滚 环境 JDK:1.8.0_211 SpringBoot:2.5.10 说明 本文通过同时写入用户(User)和用户详细…

链式队列的基本操作与实现(数据结构与算法)

链队列的表示与实现如下图&#xff1a; 代码如下&#xff1a; #include<iostream> using namespace std;#define MAXQSIZE 100 //最大队列长度 typedef int QElemType; //typedef struct Qnode {QElemType data;struct Qnode* next; }QNode, *QueuePtr; //队列结点类型…