Python教程(21)——面向对象编程的三大特性

这篇具有很好参考价值的文章主要介绍了Python教程(21)——面向对象编程的三大特性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python教程(21)——面向对象编程的三大特性

在Python中,面向对象编程是一种核心的编程思想。Python被称为“一切皆对象”的语言,因为在Python中,几乎所有的数据都被视为对象。这包括数字、字符串、列表、函数等基本类型,还有自定义的类和对象。

Python中的面向对象编程提供了类(Class)来创建对象(Object)。类是一个抽象的概念它定义了对象的属性和方法。对象是类的实例,它具有类定义的属性和方法。

当谈到面向对象编程时,封装、继承和多态是三个重要的概念和机制。

封装

封装(Encapsulation)是面向对象编程三大特性之一,它指的是将数据和对数据的操作进行封装,形成一个独立的、可复用的单位,同时隐藏内部细节,只暴露必要的接口供外部使用。

封装的目的在于将信息隐藏起来,防止外部直接访问和修改内部数据,通过将数据和操作封装在一起,提高代码的安全性和可维护性。

封装在面向对象编程中意味着将数据和数据相关的操作封装在一个对象中。通过将数据进行封装,使得数据对外部来说是不可见的,只能通过特定接口(方法)来访问和修改数据。

下面是一个简单的封装示例:

class Car:
    def __init__(self, brand, model, color):
        self._brand = brand   # 使用单下划线表示受保护属性
        self.__model = model  # 使用双下划线表示私有属性
        self.color = color    # 公有属性

    def get_brand(self):
        return self._brand

    def set_model(self, model):
        self.__model = model

    get_model(self):
        return self.__model

car = Car("Tesla", "Model 3", "Red")
print(car.color)  # 输出:Red
print(car.get_brand())  # 输出:Tesla
print(car.get_model())  # 输出:Model 3

car.color = "Blue"
car.set_model("Model Y")

print(car.get_model())  # 输出:Model Y

在上述示例中,Car类封装了汽车的品牌、型号和颜色。brand属性和color属性都是公有属性,可以直接访问和修改。model属性使用双下划线前缀表示为私有属性,外部不能直接访问,需要通过公有方法来进行访问和修改。
在封装中,我们通过定义公有和私有方法来控制对私有属性的访问。通过公有方法get_brandset_model来访问和修改私有属性__model
通过封装,我们可以隐藏实现细节,对外部提供简单的接口,使得外部用户无需了解内部的具体实现细节,提高代码的安全性和可维护性。
所以可以说,封装在面向对象编程中是一种将数据和相关操作封装在一个独立的单元中的机制,通过定义访问控制和提供接口,实现对数据的保护和隔离,同时提供简单、安全和可维护的对外交互方式。

继承

继承(Inheritance)是面向对象编程三大特性之一,它允许创建一个新的类(称为派生类或子类),并基于已存在的类(称为基类或父类)进行扩展和重用已有的属性和方法。

继承的主要目的是实现代码的重用和结构的层级化组织,通过继承,子类可以继承父类的属性和方法,并且可以在此基础上添加新的属性和方法,或者修改已有的属性和方法。

继承有以下几个重要的特点和用途:

  • 继承关系:在继承中,派生类与其基类之间会形成一种关系,派生类继承了基类的属性和方法,并且可以访问和使用它们。派生类可以看作是基类的一种特殊化。
  • 代码重用:通过继承,派生类可以重用基类已有的代码,避免重复编写相同的功能。这种重用性可以提高代码的可维护性和可扩展性。
  • 扩展和修改:派生类可以在基类的基础上添加新的属性和方法,以实现更具体、更特定的功能。同时,派生类也可以重写基类中的方法,以修改或定制已有的行为。
class Animal:
    def __init__(self, name):
        self.name = name

    def make_sound(self):
        print("Animal makes sound.")

class Dog(Animal):
    def make_sound(self):
        print("Dog barks.")

class Cat(Animal):
    def make_sound(self):
        print("Cat meows.")

dog = Dog("Buddy")
dog.make_sound()  # 输出:Dog barks.

cat = Cat("Fluffy")
cat.make_sound()  # 输出:Cat meows.

在上述示例中,Animal类是一个基类,定义了一个make_sound方法。Dog类和Cat类分别是派生类,它们继承了Animal类,并且都重写了make_sound方法。

通过继承,DogCat类获得了Animal类中的属性和方法,即name属性和make_sound方法。派生类通过重写make_sound方法,修改了基类方法的实现细节,分别实现了狗叫和猫叫的行为。

需要注意的是,继承应该遵循"是一个"的原则,即派生类应该是基类的一种类型。如果两个类之间没有明显的"is-a"关系,可能不合使用继承。

多态

多态(Polymorphism)是面向对象编程三大特性之一,具体是指同一个方法可以在不同的对象上具有不同的表现形式。多态性允许我们使用统一的接口来操作不同的对象,提高了代码的灵活性和可扩展性。这样子说可能有点抽象,我们举个例子来说明下多态的含义。

当我们讨论多态性时,常常会使用动物世界的例子来解释。想象一下有一个基类 Animal,它有一个名为 sound() 的方法。然后有两个派生类 Dog 和 Cat,它们都继承自 Animal 类,并且都重写了 sound() 方法。

class Animal:
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        print("Dog barks.")

class Cat(Animal):
    def sound(self):
        print("Cat meows.")

def make_sound(animal):
    animal.sound()

dog = Dog()
cat = Cat()

make_sound(dog)  # 输出: Dog barks.
make_sound(cat)  # 输出: Cat meows.

在上述例子中,我们定义了 Animal 类作为基类,它有一个名为 sound() 的方法。然后,我们创建了两个派生类 Dog 和 Cat,它们都继承了 Animal 类,并重写了 sound() 方法。在 Dog 类中,sound() 方法输出 "Dog barks.";在 Cat 类中,sound() 方法输出 "Cat meows."。

接下来,我们定义了一个名为 make_sound() 的函数,它收一个 Animal 对象作为参数,并调用该对象的 sound() 方法。在函数内,我们不需要考虑传入的对象具体是哪个类的实例,只需要知道它们都是 Animal 类的派生类对象。

我们通过分别传入 Dog 类和 Cat 类的实例调用了 make_sound() 函数。因为这些对象都是 Animal 的派生类对象,所以它们都有 sound() 方法。在运行时根据对象的实际类型,会自调用相应的 sound() 方法。因此,make_sound(dog) 的输出为 "Dog barks.",make_sound(cat) 的输出为Cat meows."。

这个例子展现了多态的特点,使用统一的接口(基类)不同类型的对象实现了代码的灵活性和可扩性。我们可以通过添加更多的派类来扩展动的种类,而不需要修改现有的代码。

以上就是Python面向对象编程中的一些最核心、最基本的概念。封装是将数据封装在一个类中,通过限制直接访问数据从而保护数据的安全性与完整性。继承是一种机制,它允许派生类(子类)继承基类(父类)的属性和方法,使得派生类能够重用基类的代码,并可以根据需要进行扩展或修改。多态是指在运行时,具有相同接口但具体行为不同的对象,可以根据上下文的需要,以统一的方式进行使用和处理,从而提高代码的灵活性和可扩展性。这些文字都是比较抽象的,可以根据具体的代码例子来加深理解。

更多精彩内容,请关注同名公众:一点sir(alittle-sir)
文章来源地址https://www.toymoban.com/news/detail-777073.html

到了这里,关于Python教程(21)——面向对象编程的三大特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【面向对象语言三大特性之 “继承”】

    目录 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式  1.2.2继承关系和访问限定符  1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6. 继承与静态成员 7.复杂的菱形继承及菱形虚拟继承 8.继

    2023年04月08日
    浏览(10)
  • Unity-C# (面向对象三大特性)

    传值调用和引用调用 输出:11 传值调用中形参为一个新的临时变量,赋值由实参拷贝而来,只是赋予了与实参一样的值所以在函数体内部修改并不会影响实参 输出:22 引用调用时,形参拷贝的是实参的地址,二者指向同一个堆空间,所以形参改变会对实参造成影响 输出:

    2024年04月09日
    浏览(18)
  • 【java】面向对象三大特性之多态

            俗话说的好,“一龙生九子,九子各不同”,这句话就蕴含了面向对象三大特性之一的多态的思想。那么多态具体有什么特点呢,就由博主来带大家梳理一下吧🤔 目录 一、什么是多态 二、重写 三、向上转型和向下转型 1、向上转型 2、向下转型 四、多态的优缺点

    2024年03月15日
    浏览(30)
  • 面向对象的三大特性之继承(C++)

    概念   继承机制是面向对象编编程使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承是类设计层次的复用。 定

    2024年02月06日
    浏览(19)
  • 【JAVASE】面向对象程序三大特性之一( 封装)

    ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉n 🍎个人主页:再无B~U~G-CSDN博客 目标: 1.包的使用 2.static的使用 3. 代码块概念以及分类 面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为

    2024年04月17日
    浏览(13)
  • 【javaSE】 面向对象程序三大特性之继承

    目录 为什么需要继承 继承的概念 继承的语法 注意事项  父类成员访问 子类中访问父类的成员变量 子类和父类不存在同名成员变量 子类和父类成员变量同名 访问原则 子类中访问父类的成员方法 成员方法名字不同 总结: 成员方法名字相同 总结: super 注意事项 子类

    2024年02月14日
    浏览(11)
  • Java面向对象03——三大特性之继承

    继承就是 Java 允许我们用 extends ,让一个类与另一个类建立起一种父子关系; 被继承的类称为父类(基类、超类),继承父类的类都称为子类(派生类), 当子类继承父类后,就可以直接使用父类公共的属性和方法了 当子类继承父类后,就可以直接使用父类公共的属

    2024年04月27日
    浏览(14)
  • 【JAVASE】带你了解面向对象三大特性之一(继承)

    ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 Java 中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实世界错综复杂,事物之间可能会存在一些关

    2024年04月09日
    浏览(20)
  • 【JAVASE】带你了解面向对象三大特性之一(多态)

    ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 多态的概念:通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状 态。 总的来说:同一件事情,发生在不同对象

    2024年04月14日
    浏览(24)
  • 【Go语言快速上手(四)】面向对象的三大特性引入

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Go语言专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多Go语言知识   🔝🔝 GO语言也支持面向对象编程,但是和传统的面向对象语言(如CPP)有明显的区别,GO并不是纯粹的面对对象编程语言.所以说GO是支持面向对

    2024年04月26日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包