首页 > 编程语言 >0基础学python-15:封装、继承和多态

0基础学python-15:封装、继承和多态

时间:2024-07-17 10:29:39浏览次数:12  
标签:__ .__ 15 python self 多态 odometer make def

目录

前言

 一、封装(Encapsulation)

私有变量:

 二、继承(Inherit)

 三、多态(Polymorphism)

总结


前言

        封装、继承和多态是面向对象编程的三大基本特性,它们与面向对象编程(OOP)密切相关。

 

 一、封装(Encapsulation)

  • 概念:封装指的是将数据(属性)和操作数据的方法(方法)打包在一起,并对对象的内部工作进行保护,使其只能通过受控的方式访问。
  • 关联:封装有助于提高代码的可重用性和安全性,通过限制对内部数据的直接访问,减少了意外错误的发生,并且使对象的实现细节对外部用户透明化。

 

        我的理解是将一些属性和方法放进类,相当于我们自己定义了一个内置的类。想要用类里的属性和方法,在外部调用即可,不用修改或者再自定义。

 

私有变量:

         类里面有个概念叫私有变量,定义的时候在变量名前加两个下划线。私有变量在外部不可直接调用,只能在内部修改或者调用。但因为python可以在类的外部强行调用类内的私有变量(但这是不道德的,不要这样做),所以约定俗成的将私有变量前的下划线变成一个。这样就就告知使用者,这是一个私有变量,当做常数用即可,不要修改。

 

代码实例:

class Car:
    def __init__(self, make, model, year):
        self.__make = make        # 私有属性
        self.__model = model      # 私有属性
        self.__year = year        # 私有属性
        self.__odometer = 0       # 私有属性

    def display_info(self):
        print(f"Car: {self.__year} {self.__make} {self.__model}")

    def read_odometer(self):
        print(f"This car has {self.__odometer} miles on it.")

    def update_odometer(self, mileage):
        if mileage >= self.__odometer:
            self.__odometer = mileage
        else:
            print("You can't roll back an odometer!")

    def increment_odometer(self, miles):
        self.__odometer += miles

# 创建一个 Car 对象并使用
my_car = Car("Toyota", "Corolla", 2022)
my_car.display_info()   # 输出:Car: 2022 Toyota Corolla
my_car.update_odometer(10000)
my_car.read_odometer()  # 输出:This car has 10000 miles on it.
my_car.increment_odometer(500)
my_car.read_odometer()  # 输出:This car has 10500 miles on it.
print(my_car.__make)    # 尝试在外部直接访问私有变量

输出:

        在上述代码中,属性 __make__model__year__odometer 被定义为私有属性,只能通过类内部的方法来访问和修改,实现了封装的基本概念。

Car: 2022 Toyota Corolla
This car has 10000 miles on it.
This car has 10500 miles on it.

# 报错,属性错误,显示Car类里找不到__make这个属性
Traceback (most recent call last):
  File "D:\Code\Try\HomeWork3.py", line 192, in <module>
    print(my_car.__make)
          ^^^^^^^^^^^^^
AttributeError: 'Car' object has no attribute '__make'

 

 二、继承(Inherit)

  • 概念:继承允许一个类(子类)基于另一个类(父类)的定义来创建新类,从而继承父类的属性和方法,同时可以添加自己的新功能或修改继承的功能。
  • 关联:继承支持代码的重用和扩展,使得类与类之间可以建立层次关系,提高了代码的组织性和可维护性,同时也促进了代码的灵活性和可扩展性。

 

 代码实例:此段代码有点长,希望能耐心分析

# 继承

class Animal(object):

    def __init__(self, leg, height):
        self.leg = leg
        self.height = height

    def run(self):
        print("Animal is run")


# 在括号里面写入父类的名称
class Dog(Animal):

    def __init__(self, leg, height, bark):
        super().__init__(leg, height) # 直接继承父类里属性

        self.bark = bark  # 子类新加的属性

    def eat_shit(self):   # 子类自己的方法
        print("dog can eat shit")

    # 父类存在  子类有不同的方式方法   方法的重写
    def run(self):
        print("dog is running")


class Cat(Animal):

    def __init__(self, leg, height, jump):
        super().__init__(leg, height)
        self.jump = jump

    def eat_mouse(self):
        print("maomao eat mouse")

    def run(self):
        super().run()  # 调用父类的方法
        print("cat is running")



if __name__ == '__main__':
    animal = Animal(4, 1)

    snoopy = Dog(3, 1.2, "wangwang")

    tom = Cat(2, 1.1, 1.8)

    print(snoopy.leg)
    animal.run()
    snoopy.run()
    snoopy.eat_shit()
    tom.run()
    pass

输出:

        在这个例子中,Car 类继承了 Vehicle 类的 makemodelyear 属性,同时定义了自己的 odometer 和相关方法,实现了继承的概念。

3
Animal is run
dog is running
dog can eat shit
Animal is run
cat is running

 

 三、多态(Polymorphism)

  • 概念:多态指的是同一个方法名可以在不同的类中有不同的实现方式,使得具有不同类型的对象能够对同一消息做出响应。
  • 关联:多态提高了代码的灵活性和可扩展性,允许使用统一的接口来处理不同对象的情况,从而简化了代码的复杂度,增强了代码的可读性和可维护性。

代码实例:

# 父类
class Animal:
    def sound(self):
        pass

# 子类,继承 Animal 类
class Dog(Animal):
    def sound(self):
        print("Woof!")

# 另一个子类,继承 Animal 类
class Cat(Animal):
    def sound(self):
        print("Meow!")

# 多态的应用示例
def make_sound(animal): # 创建一个函数,传入的参数是一个对象
    animal.sound()      # 调用传入对象的相同方法

# 创建不同的动物对象并调用同一方法
dog = Dog()
cat = Cat()

make_sound(dog)  
make_sound(cat)  

输出:

        在这个例子中,make_sound 函数接受一个 Animal 类型的参数,然后调用参数的 sound 方法。通过传入 DogCat 对象,实现了不同类里面的的 sound 方法,展示了多态的特性。

Woof!
Meow!

 

总结

        这三个概念共同构成了面向对象编程的基础,并且它们相互交织、相辅相成,使得面向对象的代码能够更加灵活、可靠和易于扩展。

标签:__,.__,15,python,self,多态,odometer,make,def
From: https://blog.csdn.net/weixin_65047977/article/details/140484801

相关文章

  • 【python学习】第三方库之pandas库的定义、特点、功能、使用场景和代码示例
    引言pandas是一个强大的Python库,用于数据分析和数据处理。它基于NumPy,提供了灵活的数据结构(Series和DataFrame)和数据操作功能,是数据科学和机器学习中不可或缺的工具文章目录引言一、安装`pandas`第三方库二、`pandas`的定义三、特点3.1强大的数据结构3.2灵活的数据......
  • 【python】PyQt5的窗口界面的各种交互逻辑实现,轻松掌控图形化界面程序
    ✨✨欢迎大家来到景天科技苑✨✨......
  • 自动化测试-RobotFramework环境准备(python基础)
    学习总结,有错误欢迎指出。总结:推荐为每个python相关项目创建独立的虚拟环境。1.虚拟环境安装虚拟环境:为每个项目提供独立的执行器和包管理。示例:使用python内置库venv模块,在项目根目录下创建虚拟环境。python-mvenv.venv-m:执行“位于搜索路径(sys.path)下......
  • Python办公自动化:效率飞跃,自动化批量汇总Excel到Word
    Python办公自动化:效率飞跃,自动化批量汇总Excel到Word原创 丹心向阳 数海丹心 2024年06月23日07:30 山东摘要:每个月底,是许多数据分析师的梦魇,尤其是当他们需要从成百上千的Excel报表中汇总数据到Word时。本文将讲述小李如何使用Python自动化技术,几秒钟完成原本需要通宵达旦......
  • Python自动化:智能对比Word文档,秒速锁定差异!
    Python自动化:智能对比Word文档,秒速锁定差异!原创 丹心向阳 数海丹心 2024年06月28日07:00 山东摘要:在我们的工作和学习中,经常需要对文档进行多次修改,如何快速准确地识别文档的最终版本,一直是让人头疼的问题。本文将介绍一种Python自动化技术,它可以自动对比两个Word文档之间......
  • Python自动化:10行代码免费解锁抖音、快手、小红书平台资源,无水印视频一键下载
    Python自动化:10行代码免费解锁抖音、快手、小红书平台资源,无水印视频一键下载原创 丹心向阳 数海丹心 2024年06月19日07:30 山东摘要:抖音、快手、小红书作为国内顶尖的短视频和娱乐平台,汇聚了巨大的流量和丰富的创意内容。对于自媒体从业人员而言,这些平台上的灵感和视频资......
  • C++ 多态:探索对象的动态行为
    C++多态:探索对象的动态行为在C++中,多态性是一种强大的特性,它允许我们通过基类指针或引用来调用派生类的方法。多态性不仅增加了程序的灵活性,还使得代码更加易于扩展和维护。本文将深入探讨C++中的多态性,包括静态多态(主要通过函数重载和模板实现)和动态多态(主要通过虚函数......
  • 【python】Enum 枚举类
    Enum枚举类[1]Enum是一组与互不相同的值分别绑定的符号名,类似于全局变量。因为枚举通常表示常量,所以建议枚举成员命名时采用大写。定义类定义classColor(Enum):#classsyntaxRED=1GREEN=2BLUE=3方法定义Color=Enum('Color',['RED','GRE......
  • LocalSend v1.15.0:一款免费的跨平台局域网文件传输工具
    今天电脑天空向大家介绍一款实用的开源跨平台局域网文件传输工具——LocalSendv1.15.0。这款工具能够帮助我们在不同的操作系统之间快速、安全地传输文件,非常适合开发者和IT专业人员使用。以下是LocalSend的详细介绍和使用指南。工具简介LocalSend是一款基于Web技术的文件......
  • 2024年华为OD机试真题-符号运算-(C++/Java/python)-OD统一考试(C卷D卷)
      2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】    题目描述给定一个表达式,求其分数计算结果。表达式的限制如下:所有的输入数字皆为正整数(包括0)仅支持四则运算(+-*,/)和括号结果为整数或分数,分数必须化为最简格式(比如6,3/4,7/8,90/7)除数可能为0,如果遇到......