【python入门到精通】python面向对象三大特点:封装,继承,多态

简介: 【python入门到精通】python面向对象三大特点:封装,继承,多态

🚀 作者 :“大数据小禅”


🚀 粉丝福利 :加入小禅的大数据社群


🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬


目录

一,python面向对象的特点------封装

下面两个例子对封装进行理解:

二,python面向对象的特点------继承

1,单继承

2 ,多继承

3 , 重写父类的方法

三.python面向对象的特点------多态

python语言是一门面向对象的语言,面向过程其实就是把过程当做设计核心,根据问题的发展顺序,依次解决问题,尽可能的把过程中涉及到的问题完善解决。他有他的优点,当拿到一个问题时,可以方便的按执行的步骤写代码,但是当逻辑关系变得复杂时,有一个地方出现差错就会导致整个程序无从下手。类似面向对象的编程语言有很多,例如C++ , java等,而面向对象的三大特点就是-----封装,继承,多态,下面将详细说明这三大特点的理解与用法。


开始文章前先解释下object参数:


object:
注意类名后面括号里有个参数object,他代表所有类的基类,也叫作超类。
这就有了一个新式类和旧式类的概念:
当用到多继承的时候,如果子类中没有想用的方法名或属性名,他会自动回到上面去找。那么按广度优先遍历的方法去寻找就是新式类(object);深度优先(括号里啥也没有)。

一,python面向对象的特点------封装

可以简单的理解为隐藏一切可以隐藏的实现细节,只向外界提供简单的编程接口。我们在类中定义的方法其实就是把数据和数据的操作封装起来了,在我们创建了对象之后,只需要给对象发送一个消息(调用方法)就可以执行方法中的代码,也就是说我们只需要知道方法的名字和传入的参数(方法的外部视图),而不需要知道方法内部的实现细节(方法的内部视图)


面向对象第一步 : 将属性和方法封装到一个抽象的类中
外界使用类创建对象,然后让对象调用方法
对象方法的细节都封装在类的内部

image.png

class Test():
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight
    def __str__(self):
        return '我的名字叫%s 体重是%d' %(self.name,self.weight)
    def run(self):
        print('%s爱跑步' %self.name)
        self.weight -= 0.5
    def eat(self):
        print('%s吃东西' %self.name)
        self.weight += 1
TOM = Test('TOM',76.0)
print(TOM)
TOM.run()
print(TOM)
TOM.eat()
print(TOM)
输出:
我的名字叫TOM 体重是76.00
TOM爱跑步
我的名字叫TOM 体重是75.50
TOM吃东西
我的名字叫TOM 体重是76.50

image.png

class Student(object):
      def __init__(self, name, score):
          # 属性仅前面有两个下划线代表私有变量,外部无法访问,因此我们定义了两个新的方法,这样可以避免外部通过score乱改分数,仅当我们自己知道接口才可以修改
          self.__name = name
          self.__score = score
      def info(self):
         print('name: %s ; score: %d' % (self.__name,self.__score))
      def getScore(self):
         return self.__score
      def setScore(self, score):
         self.__score = score
stu = Student('Tom',99)
print('修改前分数:',stu.getScore())
stu.info()
stu.setScore(59)
print('修改后分数:',stu.getScore())
stu.info()

二,python面向对象的特点------继承

含义:


面向对象编程有个好处就是代码复用,而其中一种方法就是通过继承机制。继承就是说定义的一个新类,继承现有的类,获得现有类的非私有属性、方法。提到个私有,就是上面提到的那个前面加两个下划线的那个东西,他在外部无法调用,继承他的子类也不能。被继承的那个类称为基类、父类或超类,继承的类叫子类也可以叫做派生类。

私有属性(补充):

在Python中,这一约定一般只是用来避免错误的方法调用,但完全无法阻止从外部调用这些被认为是“私有”的属性

python并没有真正的私有属性

用__定义的属性,只是被改名换姓而已

用_定义的属性,意义在于唤起用户的注意,看成私有属性

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。


特点:


1、在继承中,基类的构造方法(init()方法)不会被自动调用,需要在子类的构造方法中专门调用。

2、在调用基类的方法时需要加上基类的类名前缀,并带上self参数变量。区别于在类中调用普通函数时不需要带self参数。

3、在python中,首先查找对应类型的方法,如果在子类中找不到对应的方法,才到基类中逐个查找。


在程序中继承是描述事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承自狗,子类可以继承父类的公有属性和公共方法,父类中的私有属性不能被继承。


1,单继承

一般只继承一个父类就叫单继承,在java等静态语言中只能继承一个父类,也就不存在单继承和多继承了,下面看一个实例理解单继承:


# 定义一个父类,如下:
class Cat(object):
    def __init__(self, name, color="白色",source=90):        #关键字参数
        self.name = name
        self.color = color
        self.source=source
    def run(self):
        print("%s--在跑"%self.name)
# 定义一个子类,继承Cat类如下:
class Bosi(Cat):
    # 子类没有实现__init__方法,则自动调用父类的__init__方法
    def setNewName(self, newName):
        self.name = newName
    def eat(self):
        print("%s--在吃"%self.name)
bs = Bosi("波斯猫")
print('波斯猫的名字为:%s'%bs.name)
print('波斯猫的颜色为:%s'%bs.color)
print('波斯猫的评分是:%d'%bs.source)
bs.eat()
bs.setNewName('印度猫')
bs.run()
输出(这里可以看到子类Bosi继承了父类的共有方法和公有属性):
波斯猫的名字为:波斯猫
波斯猫的颜色为:白色
波斯猫的评分是:90
波斯猫--在吃
印度猫--在跑
这两个类不写在一起也是可以的,例如将Cat这个类写到另一个模块animal中,
这时候只要前面的导入模块的知识将这个Cat类导入到有Bosi类的模块中即可跟上面输出的结果一样完成继承。
语法示例: from animal import Cat
有一点要注意:要打印关键词参数的话,子类要调用init后面的关键字参数才不会报错,
要调用除了init的其他方法关键字参数就需要别的办法

image.png

class A:        # 定义类 A
.....
class B:         # 定义类 B
.....
class C(A, B):   # 继承类 A 和 B
.....

image.png

class Cat:
    def sayHello(self):
        print("hello-----1")
class Bosi(Cat):
    def sayHello(self):
        print("hello-----2")
class Bali(Cat):
    def sayHello(self):
        print("hello-----3")
bosi = Bosi()
bali= Bali()
bosi.sayHello()
bali.sayHello()
"""
输出结果:
hello-----2
hello-----3
"""

image.png

相关文章
|
2月前
|
程序员 UED Python
Python入门:3.Python的输入和输出格式化
在 Python 编程中,输入与输出是程序与用户交互的核心部分。而输出格式化更是对程序表达能力的极大增强,可以让结果以清晰、美观且易读的方式呈现给用户。本文将深入探讨 Python 的输入与输出操作,特别是如何使用格式化方法来提升代码质量和可读性。
Python入门:3.Python的输入和输出格式化
|
18天前
|
数据采集 数据可视化 大数据
Python入门修炼:开启你在大数据世界的第一个脚本
Python入门修炼:开启你在大数据世界的第一个脚本
57 6
|
16天前
|
数据可视化 流计算 Python
Python创意爱心代码大全:从入门到高级的7种实现方式
本文分享了7种用Python实现爱心效果的方法,从简单的字符画到复杂的3D动画,涵盖多种技术和库。内容包括:基础字符爱心(一行代码实现)、Turtle动态绘图、Matplotlib数学函数绘图、3D旋转爱心、Pygame跳动动画、ASCII艺术终端显示以及Tkinter交互式GUI应用。每种方法各具特色,适合不同技术水平的读者学习和实践,是表达创意与心意的绝佳工具。
234 0
|
2月前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
2月前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
2月前
|
缓存 算法 数据处理
Python入门:9.递归函数和高阶函数
在 Python 编程中,函数是核心组成部分之一。递归函数和高阶函数是 Python 中两个非常重要的特性。递归函数帮助我们以更直观的方式处理重复性问题,而高阶函数通过函数作为参数或返回值,为代码增添了极大的灵活性和优雅性。无论是实现复杂的算法还是处理数据流,这些工具都在开发者的工具箱中扮演着重要角色。本文将从概念入手,逐步带你掌握递归函数、匿名函数(lambda)以及高阶函数的核心要领和应用技巧。
Python入门:9.递归函数和高阶函数
|
2月前
|
存储 SQL 索引
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器
|
2月前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
1月前
|
数据采集 人工智能 数据挖掘
Python 编程基础与实战:从入门到精通
本文介绍Python编程语言,涵盖基础语法、进阶特性及实战项目。从变量、数据类型、运算符、控制结构到函数、列表、字典等基础知识,再到列表推导式、生成器、装饰器和面向对象编程等高级特性,逐步深入。同时,通过简单计算器和Web爬虫两个实战项目,帮助读者掌握Python的应用技巧。最后,提供进一步学习资源,助你在Python编程领域不断进步。
|
1月前
|
Python
Python 高级编程与实战:深入理解面向对象与并发编程
本文深入探讨Python的高级特性,涵盖面向对象编程(继承、多态、特殊方法、类与实例属性)、异常处理(try-except、finally)和并发编程(多线程、多进程、异步编程)。通过实战项目如聊天服务器和异步文件下载器,帮助读者掌握这些技术,编写更复杂高效的Python程序。

热门文章

最新文章