0

0

Python语言的面向对象编程的介绍(附代码)

不言

不言

发布时间:2019-03-09 13:56:35

|

3098人浏览过

|

来源于CSDN

转载

本篇文章给大家带来的内容是关于python语言的面向对象编程的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

Python语言的面向对象

面向对象编程,即OOP,对于面向对象的语言来说,常常会提到封装、继承、类等概念。
面向对象的由来:基于哲学中的万物皆对象,核心思想是将我们的程序对象化,模块化,在Python语言中常用class命名一个类,比如class Person(),class Student等等。在类中常常有属性和行为,比如在Person这个类中有名字,身高,体重等属性,这些Python有吃,睡,交朋友等行为。通过类我们可以很方便的实现后期的调用,而不需要将一些重复的代码再写一遍,这样大大提高了编程的效率。所以目前面向对象的编程语言应用广泛。
面向对象有三大特征 继承,封装,多态

1  继承
继承概念:一个类继承另一个类,则称继承的类为子类,被继承的类为父类。
目的:能够实现代码的重复使用。
理解:子类与父类的关系并不是日常生活中的父子关系,子类与父类而是一种特殊化与一般化的关系,是is-a的关系,子类是父类更加详细的分类。如 class dog 继承于 animal,就可以理解为dog is a animal.注意设计继承的时候.
结果:继承后子类自动拥有了父类的属性和方法,子类可以写自己特有的属性和方法,目的是实现功能的扩展,子类也可以复写父类的方法即方法的重写。

2 封装
概念:封装也称为信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只
保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。也就是说,用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。
好处:(1)明确分工。将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要的时候调用,从而实现了专业的分工。(2)信息隐蔽,实现细节。通过控制访问权限可以将可以将不想让客户端程序员看到的信息隐藏起来,如某客户的银行的密码需要保密,只能对该客户开发权限。
3 多态
概念:相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。
理解:子类以父类的身份出现,但做事情时还是以自己的方法实现。子类以父类的身份出现需要向上转型(upcast),其中向上转型是由JVM自动实现的, 是安全的,但向下转型(downcast)是不安全的,需要强制转换。子类以父类的身份出现时自己特有的属性和方法将不能使用。
“面向过程”和“面向对象”的区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
可以拿生活中的实例来理解面向过程与面向对象,例如完成一场比赛,面向过程的设计思路就是首先分析问题的步骤:
1、比赛开始 2、开始竞争,3、中途超越,4、分出胜负。把上面每个步骤用不同的方法来实现。
如果是面向对象的设计思想来解决问题。面向对象的设计则是从另外的思路来 解决问题。整个比赛可以分为1、比赛对象 2、比赛规则3、结果评定等。
下面以一个小例子来说明Python语言面向对象的编程过程:

立即学习Python免费学习笔记(深入)”;

Cursor
Cursor

一个新的IDE,使用AI来帮助您重构、理解、调试和编写代码。

下载
一、
#1 定义一个类,其中类名是学生
#2 学生具有的属性
#3 学生具有哪些行为
#4 具体化两个学生,实例化类型
class Student(object):
    name = " "
    age = 12
    weight = 50
    school = "wuhan university"
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
stu1 = Student()
stu2 = Student()
print(stu1)
print(stu2)
print(stu1.name)
print(stu1.age)
print(stu2.name)
print(stu2.age)

二、
#进一步优化:通过上面的程序我们发现他们最终输出的对象的属性一样,但是事实上他们是两个不同的学生,他们的名字,年龄并不相同,那么接下来需要做的就是给他们各自赋予各自的属性,利用类名.属性=某个值,和方法的调用一样也是类名.方法名
class Student(object):
    name = " "
    age = 12
    weight = 50
    school = "wuhan university"
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
stu1 = Student()
stu1.name="王"
stu1.age = 20

stu2 = Student()
stu2.name = "张"
stu2.age = 50
print(stu1)
print(stu1.name)
print(stu1.age)
print(stu2)
print(stu2.name)
三、
#进一步优化:通过第二个程序我们发现在定义对象的属性时我们还需要将所得属性命名在写一次,这样显然比价麻烦,于是有了更好的属性命名方法,我们可以使用初始化 
def __init__(self,、、、),最后在命名属性的时候只需要在类名后面的括号中填写具体的属性值即可,大大较少了代码量。

class Student(object):
    def __init__(self,name,age,school):
        self.name = name
        self.age = age
        self.school = school
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
stu1 = Student("li",25,"scu")
stu2 = Student("sun",20,"wpu")
print(stu1)
print(stu2)
print(stu1.name)
print(stu1.school)
print(stu2.name)
print(stu2.school)

self 代表类中的实例,而不是类,那个实例调用类中的方法,那么这个self就属于那个对象,例如在Student中加一个方法,自我介绍。

class Student(object):
    def __init__(self,name,age,school):
        self.name = name
        self.age = age
        self.school = school
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
    def intro(self):
        print("my name is{},{} years old".format(self.name,self.age))
stu1 = Student("li",25,"scu")
stu2 = Student("sun",20,"wpu")
print(stu1)
print(stu2)
print(stu1.name)
print(stu1.school)
print(stu2.name)
print(stu2.school)
intro1 = stu1.intro()
intro2 = stu2.intro()

若要打印出对象的属性等信息给客户看,但是由于属性太多,一个个打印出来很麻烦,可以使用__str__(),如下:

class Student(object):
    def __init__(self,name,age,school):
        self.name = name
        self.age = age
        self.school = school
    def eat(self,orange):
        print("l love orange")
    def study(self):
        print("let me study!")
    def intro(self):
        print("my name is{},{} years old".format(self.name,self.age))
    def __str__(self):
        return "%s-%d"%(self.name,self.age)
stu1 = Student("li",25,"scu")
stu2 = Student("sun",20,"wpu")


print(stu1)

如果要是的Python中类的属性值不改变,那么在属性前加两个-,称为私有属性,private
如:
self.__money = money,不能再外面直接访问
print(stu1.__money)报错
但是在内部可以直接使用,如在方法eat中调用
如果属性名前是一个下划线,则他虽然可以在外部访问,但是约定俗成提示不要访问!!!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

338

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

225

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

138

2026.02.12

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

63

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号