• 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
    
    • 1
    • 2

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

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

    2) 类的实例化

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

    Apple()
    
    • 1

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

    A = Apple()
    print(A)
    
    • 1
    • 2

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

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    尽管该类也定义了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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    执行结果如下图所示:
    在这里插入图片描述
    以上代码创建了空的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())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    等类和方法完成后,创建一个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())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    执行结果如下图所示:
    在这里插入图片描述
    从上面的例子不难看出,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)
  • 相关阅读:
    fusion 360制作机械臂
    城市公交查询系统android
    七绝 . 秋寒
    摄影网页设计制作 简单静态HTML网页作品 WEB静态摄影网站作业成品 学生DW摄影网站模板
    Weblogic10中常用Linux指令
    [LeetCode周赛复盘] 第 322 场周赛20221204
    MySQL从基础到毕业【完整篇】
    Quartz.Net 主要概念介绍和吐槽
    JS面试题----防抖函数
    centos8升级宝塔导致的openssl系列问题
  • 原文地址:https://blog.csdn.net/jackson_lingua/article/details/134480885