首 页IT知识库收藏内容
当前位置:翔宇亭IT乐园IT知识库Python

Python中的类和对象

减小字体 增大字体 作者:本站  来源:本站原创  发布时间:2022-12-14 01:00:32

这篇文章将介绍Python中类和对象的定义和使用方法。

类和对象基础知识

在面向对象世界里,我们在描述事物时一般从静态特征和动态特征两个方面进行描述。比如描述一个人,年龄、发色、脸型、身高等这些属于静态特征,而说话、跑步、走路等,这些属于动态特征。

在实际中,我们到底需要描述事物的那些特征,这跟我们要研究的问题领域有关,比如同样一个人,他作为学生时,我们可能关注他的学号、姓名、年龄、班级、专业、学习年限等静态特征,可能关注他的选课、考试、参加体育活动等动态特征;如果他作为一个职工,可能我们要关注他的职工号、姓名、年龄、工作年数、职级、入职时间等静态特征,可能关注他的晋职、加薪、辞职、退休等动态特征。

在面向对象里,我们把事物的静态特征称为属性,而把动态特征称为行为。

我们把具有相同属性和行为的事物定义为一个类

对象属于类的一个实例,也就是说对象是类的一个具体的内容。如定义了一个学生类,则一个具体的学生张三就是学生的一个实例。

类是产生对象的一个模板,使用类定义的对象具有相同的属性和行为,只不过属性的取值可能不同,行为产生的最终结果可能不同。

在具体的编程语言中,有时属性也称之为类的变量,而行为称之为类的方法或类的函数。

在具体的编程语言中,一个类可能既有属性又有方法,也可能只有属性,也可能只有方法。

Python中的类和对象

Python中类的定义方法

在Python中使用关键字class来定义一个类,其基本语法格式如下:

class className:
    # 类的属性或方法

上面className表示类的名称,类的名称一般是个名词,在Python中类的名称后紧跟一个冒号,然后在下面定义它的属性或方法。

类定义的一个例子

下面我们来定义个学生类。

class Student:
    student_id = '00000'
    student_name = '无名氏'

    def haveLesson(self):
        print(f'{self.student_id}的姓名是:{self.student_name}')
        print(f'{self.student_name}正在上课。')

上面这个例子定义了一个学生类,在里面定义了两个变量,student_id和student_name并给出了默认值。由于Python中的变量无需事先定义直接可以使用,则如果定义的话必须给出一个值来。

haveLesson属于类中定义的一个方法(函数),它跟定义普通方法的方式没有什么区别,不过类中的每个方法都有一个参数self,它表示调用当前方法的类的对象实例。haveLesson()方法中用于输出两行信息。

在使用这个类定义对象时,所有对象在其两个属性上的取值都相同的。

定义类的实例(对象)

下面这个例子在上面例子的基础上来定义实例并演示具体使用方法。

s1 = Student()
s1.haveLesson()

s1.student_id = '10011'
s1.student_name = '翔宇亭'
s1.haveLesson()

上面这个例子演示了创建类对象的方法,Python跟其他面向对象语言不同,在定义实例(对象)时,直接使用s1 = Student()即可,无需使用new。

上面这个例子也演示了对象使用其属性和方法的形式。

其输出结果如下:

00000的姓名是:无名氏
无名氏正在上课。
10011的姓名是:翔宇亭
翔宇亭正在上课。

Python中定义类的构造器

类的构造器又称类的构造函数或构造方法。Python中定义构造函数的方式与其它面向对象语言也不相同,它使用__init__()实现。

比如上面学生类的例子,使用它定义的每个对象都具有相同的student_id和student_name取值,如何在定义实例时获得不同的取值呢?这就需要借助类的构造器了。

下面这个例子对上面的例子进行了改写。

class Student:
    def __init__(self, sid, sname):
        self.student_id = sid
        self.student_name = sname

    def haveLesson(self):
        print(f'{self.student_id}的姓名是:{self.student_name}')
        print(f'{self.student_name}正在上课。')

s1 = Student('10011', '翔宇亭')
s1.haveLesson()

s2 = Student('10012', '优雅的代码')
s2.haveLesson()

其运行结果如下:

10011的姓名是:翔宇亭
翔宇亭正在上课。
10012的姓名是:优雅的代码
优雅的代码正在上课。

Python与其它面向对象编程语言不同的是,它不支持类构造函数的重载,即Python不支持在类中定义多个构造函数。最后一个定义的构造函数将会覆盖掉前面定义的构造函数,同时Python不给出任何提示。如下面的例子:

class Student:
    def __init__(self, sid):
        self.student_id = sid

    def __init__(self, sid, sname):
        self.student_id = sid
        self.student_name = sname

    def haveLesson(self):
        print(f'{self.student_name}({self.student_id})在上课.')

s1
= Student('10011')
s1.haveLesson()

其运行结果如下:

Traceback (most recent call last):
  File "D:/Py/classInPython.py", line 12, in <module>
    s1 = Student('10011')
TypeError: Student.__init__() missing 1 required positional argument: 'sname'

从结果可以看出,因为最后定义的构造函数是带2个参数的,因此在定义实例时使用1个参数将会给出TypeError错误。


本文讲解了Python中定义类和对象的方法,如有问题欢迎留言指出。如需转载请注明出处:翔宇亭IT乐园(http://www.biye5u.com),并给出本文链接地址:

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2024 biye5u.com. All Rights Reserved.