Python面向对象的三大特性

简介: python面向对象编程(OOP)的三大特性是封装、继承和多态。这些特性共同构成了OOP的基础,使得软件设计更加灵活、可维护和可扩展。

三大特性

       面向对象编程(OOP)的三大特性是封装、继承和多态。这些特性共同构成了OOP的基础,使得软件设计更加灵活、可维护和可扩展。

       封装

封装的定义

封装是创建对象的过程,这些对象将数据(属性)和行为(方法)组合在一起。封装的目的是:

保护数据:防止对象的内部数据被外部代码直接访问和修改。

提供接口:只允许外部代码通过对象提供的方法来访问和修改数据。

封装的好处

减少耦合:对象之间的依赖关系减少,因为外部代码不直接依赖于内部实现。

提高可维护性:对象的内部实现可以独立于外部代码进行修改,只要接口保持不变。

增强安全性:通过隐藏内部实现,可以防止外部代码意外破坏对象的状态。

封装的实现

     

class Person:

   def __init__(self, name, age, sex, height):

       self.name = name

       self.__age = age

       self.__sex = sex

       self.__height = height

 

   # 获取时触发

   @property

   def height(self):

       return self.__height

 

   # 设置时触发

   @height.setter

   def height(self, height):

       if 0 < int(height) < 300:

           self.__height = height

       else:

           print(f"{height} ??? 你看看你还是人吗")

 

   def set_age(self, age):

       self.__age = age

 

   def get_age(self):

       return self.__age

 

   def __set_sex(self, sex):

       if sex in ["男", "女"]:

           self.__sex = sex

       else:

           print("你看看你是森么")

 

   def __get_sex(self):

       return self.__sex

 

   # 通过 property 方法 设置私有属性 以达到 即可方便 访问 又可 过滤设置的一些不合法信息 安全的双重保障

   sex = property(__get_sex, __set_sex)

 

   def set_name(self, name):

       self.name = name

 

   def get_name(self):

       return self.name

 

   def __str__(self):

       return f'姓名:{self.get_name()} 年龄:{self.get_age()} 性别:{self.__get_sex()}'

 

 

# 公有属性 方便调用 相较于 私有属性来说 但容易产生不合法数据

p1 = Person("刘备", 20, "男", 175)

p1.name = "曹操"

# 私有属性只能通过 set get 方法设置或调用 过滤设置的一些不合法信息

p1.set_age(25)

print(p1)

 

print(p1.sex)

p1.sex = "嘿嘿"

print(p1.sex)

 

# 装饰器 更方便

print(p1.height)

p1.height = "180"

print(p1.height)

 

print(p1.height)

p1.height = "520"

print(p1.height)

结论

       封装是OOP中的关键概念,它有助于创建模块化、易于维护和安全的代码。通过使用私有属性、属性装饰器、自定义的访问和设置方法,以及__slots__,Python提供了多种机制来实现封装。

       继承

       继承是面向对象编程(OOP)中的一个基本概念,它允许我们基于现有类创建新类,这种新类称为子类或派生类,而现有的类称为基类或父类。继承是一种代码复用机制,它提供了一种方式来扩展或修改现有类的行为。

     

继承的基本概念

基类(Base Class):定义了通用属性和方法的类。

子类(Derived Class):从基类继承并可能添加或修改属性和方法的类。

派生类(Subclass):继承自另一个类的类。

超类(Superclass):被另一个类继承的类。

继承的特点

代码复用:子类可以复用基类的代码,减少重复代码的编写。

扩展性:子类可以扩展基类的功能,添加新的属性和方法。

可维护性:对基类的修改会自动反映到所有子类中,简化了维护工作。

多态性:子类可以重写基类的方法,实现多态性。

继承实现

     

"""

object 是所有 类 的 父类

子类拥有父类的功能方法

.__class__ 判断 类

.__base__ 类 的 父类

.__bases__ 类 的 父类们

"""

 

 

 

# 单继承

class Person(object):

 

   def __init__(self, name, age):

       self.name = name

       self.age = age

 

   def __str__(self):

       return f"人 {self.name} {self.age}"

 

   def eat(self):

       return print(f'{self.name} eat food')

 

   def sad(self):

       return print(f"{self.name}:红红上仙好漂亮")

 

 

p = Person("权贵", 20)

print(p)

p.sad()

p.eat()

 

 

# Person 子类

class SuperPerson(Person):

   def __init__(self, name, age, skill):

       super().__init__(name, age)

       self.skill = skill

 

   def __str__(self):

       return f"超{super().__str__()} 技能 {self.skill}"

 

   def sad(self):

       return print(f"{self.name}:红红好漂亮")

 

   def work(self):

       return print(f"{self.name}  修炼")

 

 

sp = SuperPerson("月初", 999, "虚空之泪")

print(sp)

sp.sad()

sp.work()

 

 

class SuperMan(Person):

   def __init__(self, name, age, sex):

       super().__init__(name, age)

       self.sex = sex

 

 

sm = SuperMan('光头强', 20, "男")

print(sm)

 

 

#  多继承

 

class MoveAble:

   def __init__(self, speed):

       self.speed = speed

 

   def move(self):

       return print(f"{self.speed} km/h")

 

 

class EatAble:

   def __init__(self, eat):

       self.eat = eat

 

   def eat_good(self):

       return print(f"{self.eat} lead me strong")

 

   def __str__(self):

       return f"EarAble 类"

 

 

class Attack:

   def __init__(self, ack):

       self.ack = ack

 

 

class Person(MoveAble, EatAble):

   def __init__(self, name, speed, eat):

       self.name = name

       MoveAble.__init__(self, speed)

       EatAble.__init__(self, eat)

 

   def sad(self):

       return print(f"{self.name} have {self.speed} km/h go to eat {self.eat} ")

 

   def __str__(self):

       return f"Person 类"

 

 

p = Person("aa", 30, "炒鸡")

p.sad()

p.eat_good()

p.move()

 

e = EatAble("炒鸡")

e.eat_good()

 

 

class PersonSon(Person, Attack):

   def __init__(self, name, speed, eat, ack):

       Person.__init__(self, name, speed, eat)

       Attack.__init__(self, ack)

 

   def __str__(self):

       return f'{self.name} {self.eat} milk'

 

 

ps = PersonSon("海尔", 1, "eat", "100")

print(ps)

 

# 多继承 mro():method(方法) retrieval(检索) order(顺序)

# Method Resolution Order,简称MRO

# Python3 使用 C3线性化算法

# 通过一个类的.__mro__属性或者.mro()方法来查看类的MRO

print(PersonSon.mro())

       多态

多态的定义

多态性意味着“多种形式”。在编程中,多态性主要体现在以下几个方面:

编译时多态:通过函数重载(在某些语言中)实现,即同一个函数名可以有多个实现,根据不同的参数类型来调用不同的版本 python通过*args 形参来实现

运行时多态:通过方法重写(子类重写父类的方法)和动态绑定实现,即在运行时根据对象的实际类型来调用相应的方法。

多态的好处

提高代码的灵活性:可以使用统一的接口来处理不同类型的对象。

减少代码冗余:避免了为每种类型编写特定的代码。

提高代码的可扩展性:新增对象类型时,不需要修改现有的代码,只需要确保它们遵循相同的接口。

多态实现

class Animal:

   def walk(self):

       print("走")

 

 

class Cat(Animal):

   def walk(self):

       print("窜来窜去")

 

 

class Chicken(Animal):

   def walk(self, speed):

       speed = speed

       print("唱跳rap", speed)

 

   def attack(self, *args):

       return print(*args)

 

 

# 父子类多态,函数名参数都相同,但是实现不同

c = Chicken()

c.walk(2.5)

# 通过*args实现

c.attack("击 击 击 ")

c.attack("坤拳", "铁山靠")

结论

       多态是OOP中的一个重要特性,它提高了代码的灵活性和可扩展性。在Python中,多态性主要通过方法重写和动态绑定实现,这使得我们可以使用统一的接口来处理不同类型的对象。鸭子类型的概念进一步强化了Python中多态性的应用,使得我们更加关注对象的行为而非类型。

四、结语

       面向对象编程是一种强大的工具,它可以帮助我们以一种更加模块化和可重用的方式来构建软件。Python的OOP特性使得它成为实现面向对象设计的优选语言之一。通过掌握类、继承、封装和多态,你可以编写更加灵活和可维护的代码。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
452 2
|
Python
你真的会面向对象吗!解密Python“魔术方法”
你真的会面向对象吗!解密Python“魔术方法”
203 0
Python 高级编程与实战:深入理解面向对象与并发编程
本文深入探讨Python的高级特性,涵盖面向对象编程(继承、多态、特殊方法、类与实例属性)、异常处理(try-except、finally)和并发编程(多线程、多进程、异步编程)。通过实战项目如聊天服务器和异步文件下载器,帮助读者掌握这些技术,编写更复杂高效的Python程序。
|
安全 数据处理 索引
深入探讨 Python 列表与元组:操作技巧、性能特性与适用场景
Python 列表和元组是两种强大且常用的数据结构,各自具有独特的特性和适用场景。通过对它们的深入理解和熟练应用,可以显著提高编程效率和代码质量。无论是在数据处理、函数参数传递还是多线程环境中,合理选择和使用列表与元组都能够使得代码更加简洁、高效和安全。
389 9
|
Python
Python面向对象(2)
【10月更文挑战第14天】
217 6
Python面向对象(2)
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
172 2
Python面向对象
|
Python
闭包(Closure)是**Python中的一种高级特性
闭包(Closure)是**Python中的一种高级特性
229 8
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
前端开发 Python
Python编程的面向对象有哪些(二)
Python编程的面向对象(二)—类的多态
161 7
|
存储 大数据 数据处理
Python 中的列表推导式与生成器:特性、用途与区别
Python 中的列表推导式与生成器:特性、用途与区别
289 2

推荐镜像

更多