面向对象的三大特性-python

简介: 面向对象的三大特性-python

写在前面:

今天接着昨天的写面向对象的三大特性,分别讲解封装、继承、多态。

同时给大家推荐一个学习的网站链接:菜鸟教程-python面向对象


面向对象的三大特性


三大特性:封装、继承、多态。


1.封装


1.对象都有明确的边界,把属性和方法保护在边界之内。(安全性)

2.封装的力度适中。

3.封装的原则

(1)将不需要对外提供的内容进行隐藏。
(2)隐藏属性,提供公共的方法对其访问
    私有属性:__name="xxx"


2.继承


继承是父类与子类的关系,比如狗类和二哈,狗类就是父类,二哈是子类。

(1)定义形式(类的完整形式)

class 子类的类名(父类的类名):
    属性
      方法


(2)父类:基类,超类

object————顶层类
    如果对象没有书写继承关系,默认继承object


(3)继承的特点

  • 子类可以继续父类的属性和方法

举例:用子类创建的对象调用父类的属性和方法

# 定义父类
class A:
    name1 = "父类的属性1"
    def aa(self):
        print("父类的方法1")
# 定义子类
class B(A):
    name2 = "子类的属性1"
    def bb(self):
        print("子类的方法1")
n = B()
print(n.name2)  #调用子类的属性
n.bb()  #调用子类的方法
print(n.name1)  #调用父类的属性
n.aa()  #调用父类的方法


执行结果为:

子类的属性1
子类的方法1
父类的属性1
父类的方法1


  • 可扩展性。父类扩展了,子类也得到扩展。
  • 如果子类没有构造方法,对象会去调用父类的。
  • 如果子类有自己的构造方法,则不会去调用父类的。
  • 子类的构造方法可以调用父类的构造方法,调用可以有以下两种方式:
父类的类名.__init__(self)  #手动传递self
super().__init__()  #不需要加self
  • 多继承

一个子类可以继承多个父类。

# 定义父类A
class A:
    name_a = "父类A的属性1"
    def aa(self):
        print("父类A的方法1")
# 定义父类B
class B:
    name_b = "父类B的属性1"
    def bb(self):
        print("父类B的方法1")
#定义子类C
class C(A,B): #继承两个父类
    pass #跳过
n = C()
print(n.name_a)
print(n.name_b)
n.aa()
n.bb()


执行结果为:

父类A的属性1
父类B的属性1
父类A的方法1
父类B的方法1

注:多继承有好有坏,优点是增强了可拓展性,缺点则是继承关系复杂之后容易混乱逻辑,难看懂,同时也会占用大量资源,比如著名的钻石继承问题,主要涉及mro和C3算法,不懂的可以百度一下。


(4)方法覆盖

  • 子类中的方法与父类中的方法同名,则覆盖父类。
#定义父类
class Animal:
    def eat(self):
        print("动物会吃东西")
#定义子类狗
class dog(Animal):
    def eat(self):
        print("狗会吃东西")
d = dog()
d.eat()


执行结果为:

狗会吃东西
  • 子类覆盖了覆盖的方法之后,本质上并没有替换父类的方法,父类的方法依然存在并可以给其他子类调用。
  • 方法覆盖的前提:子类的方法名必须和父类的完全相同


(5)方法重载

出现多个方法名一样的方法(函数),Python中通过默认值进行方法重载。


3.多态和多态性


多态:一类事物有多种形态,是一种使用对象的方式,子类重写父类的方法,调用不同的子类对象的相同父类的方法,可以产生不同的效果。


举例:以王者荣耀选英雄为例,英雄类(Hero)为父类,该父类中有一个方法叫stroke(技能);程咬金和后裔分别为两个子类,两个子类中也有stroke这个方法;调用者为另一个父类,有一个选择英雄的方法,该方法需要调用stroke这个类方法,最后调用不同的子类(程咬金或后裔)对象,得到不同的技能描述。

#定义父类Hero
class Hero :
    def stroke(self):   #技能函数
        print("英雄技能")
#定义子类程咬金
class ChengYaoJin(Hero):
    def stroke(self):   #技能函数
        print("一技能跳跃,二技能旋转,大招回血")
#定义子类后裔
class HouYi(Hero):
    def stroke(self):   #技能函数
        print("一技能多发,二技能射圈,大招大鸟眩晕")
#定义调用者
class Person:
    def chose_hero(self,hero):  #玩家选择英雄
        hero.stroke()
c = ChengYaoJin()   #程咬金
x = HouYi()     #后裔
p = Person()    #玩家
p.chose_hero(c)     #玩家选择程咬金,"c"换成"x"就会产生不同的结果


执行结果为:

一技能跳跃,二技能旋转,大招回血


多态性:向不同的对象发送不同的信息,不同的对象接收到信息后,会做出不同的反应。

#定义鸟类
class Bird:
    def fly(self):
        print("鸟会飞")
#定义飞机类
class Plane:
    def fly(self):
        print("飞机会飞")
#定义火箭类
class Rocket:
    def fly(self):
        print("火箭会飞")
#函数调用父类的fly方法
def fun1(obj):
    obj.fly()
fun1(Bird())    #调用鸟类的fly方法
fun1(Plane())   #调用飞机类的fly方法
fun1(Rocket())  #调用火箭类的fly方法


执行结果为:

鸟会飞
飞机会飞
火箭会飞


持续更新中!


目录
相关文章
|
2月前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
83 2
|
23天前
|
Python
闭包(Closure)是**Python中的一种高级特性
闭包(Closure)是**Python中的一种高级特性
38 8
|
22天前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
2月前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
2月前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
2月前
|
存储 大数据 数据处理
Python 中的列表推导式与生成器:特性、用途与区别
Python 中的列表推导式与生成器:特性、用途与区别
34 2
|
3月前
|
前端开发 Python
Python编程的面向对象有哪些(二)
Python编程的面向对象(二)—类的多态
30 7
|
3月前
|
IDE Java 开发工具
Python类与面向对象
Python类与面向对象
|
3月前
|
机器学习/深度学习 人工智能 安全
python和Java的区别以及特性
Python:适合快速开发、易于维护、学习成本低、灵活高效。如果你需要快速上手,写脚本、数据处理、做点机器学习,Python就是你的首选。 Java:适合大型项目、企业级应用,性能要求较高的场景。它类型安全、跨平台能力强,而且有丰富的生态,适合更复杂和规模化的开发。
74 3
|
2月前
|
Python
Python编程-关于面向对象的一些
Python编程-关于面向对象的一些
21 0