【零基础入门学习Python---Python面向对象编程保姆级教程】

news2024/12/23 10:49:56

在这里插入图片描述

🚀 Python 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 Python 🚀

在这里插入图片描述

🍔 目录

  • 🎍 Python面向对象编程
    • 🎋 面向对象编程的基本概念
    • 🎋 类和对象的创建
    • 🎋 self关键字
    • 🎋 属性和方法的定义
    • 🎋 封装、继承和多态的概念
    • 🎋 特殊方法和属性的使用
    • 🎋 使用面向对象编程解决实际问题
    • 🎋 面向对象设计原则
    • 🎄 Python面向对象编程简单总结
    • 💬 共勉

🎍 Python面向对象编程

本文将介绍Python中的面向对象编程,包括面向对象编程的基本概念、类和对象的创建、属性和方法的定义、封装、继承和多态的概念、特殊方法和属性的使用、使用面向对象编程解决实际问题和面向对象设计原则,并提供详细的案例代码。

🎋 面向对象编程的基本概念

面向对象编程是一种编程范式,它将数据和相关的处理方法组合在一起形成对象,并通过封装、继承和多态等机制来实现软件开发的目的。面向对象编程的基本概念包括类、对象、属性、方法、封装、继承和多态等。

🎋 类和对象的创建

在Python中,使用class关键字来定义类,类是一种数据类型,用于定义对象的属性和方法。创建对象时,我们需要实例化类,并将实例化后的对象赋值给变量,这样我们就可以使用对象对属性和方法进行操作。

以下是一个演示如何创建类和对象的示例:

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

my_car = Car('Toyota', 'Camry', 2020)
print(my_car.make, my_car.model, my_car.year)

在这个示例中,我们定义了一个名为Car的类,然后使用__init__()方法初始化类的属性。然后,我们实例化了一个名为my_car的对象,并将’Toyota’、'Camry’和2020作为参数传递给__init__()方法。

🎋 self关键字

  • 在 Python 类中,self 是一个关键字,可以用来指代对象本身。每个类中的方法都至少有一个参数,通常被命名为 “self”,这个参数指向调用该方法的对象本身。在方法内部,我们可以使用 self 来访问该对象的属性,甚至可以调用其他方法。
  • self 是自动传递的,我们无需手动指定,Python 会自动为我们传递当前实例的引用。
  • 通过 self.属性名 的方式访问实例的属性。
  • 在方法内调用其他的方法时,需要使用 self.方法名 的方式。
  • 在方法内部通过 self.class() 的方式创建一个新的实例。
  • self 和其他语言中的 this 关键字的区别:在其他一些面向对象的编程语言中,比如 Java 或 C++,使用的关键字是 this,而不是 self。它们的用法基本相似,都是用来指代对象本身。但是,与 self 不同的是,this 是一个指向对象地址的指针,并且必须通过指针间接访问对象的成员。而在 Python 中,self 不是指针,而是一个特殊的变量名,它在方法调用时会自动绑定到当前实例对象,并且可以直接访问该实例的属性和方法。
  • self 是 Python 中用来指代对象本身的关键字,用于访问对象的属性和方法,以及创建新的实例。与其他面向对象编程语言中的 this 关键字不同,self 是一个变量名,而不是指针。在方法调用时,Python 会自动将 self 绑定到当前实例对象。

🎋 属性和方法的定义

Python中的类可以定义属性和方法,属性是类的特性,方法是定义在类中的函数,用于操作这些属性。

以下是一个演示如何定义属性和方法的示例:

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.resale_value = 0
        
    def set_resale_value(self, value):
        self.resale_value = value
        
    def get_resale_value(self):
        return self.resale_value

my_car = Car('Toyota', 'Camry', 2020)
my_car.set_resale_value(18000)
print(my_car.get_resale_value())

在这个示例中,我们定义了一个名为resale_value的属性,并使用set_resale_value()和get_resale_value()方法来设置和获取它的值。

🎋 封装、继承和多态的概念

封装、继承和多态是面向对象编程的核心概念之一。

  • 封装:指的是将数据和方法组合在一起形成类的过程。这种方法可以保护数据和方法不被其他程序员直接访问。

  • 继承:指的是创建一个新类,从一个现有类中继承属性和方法的过程。新类通常称为子类,现有类称为父类。

  • 多态:指的是相同的操作或方法作用于不同的对象上可以产生不同的结果的能力。

以下是一个演示封装、继承和多态概念的示例:

class Animal:
    def __init__(self, name):
        self.name = name
        
    def speak(self):
        pass

class Dog(Animal):
    def __init__(self, name):
        super().__init__(name)
        
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def __init__(self, name):
        super().__init__(name)
        
    def speak(self):
        return "Meow!"

dog = Dog("Fido")
cat = Cat("Fluffy")

print(dog.name, dog.speak())
print(cat.name, cat.speak())

在这个示例中,Animal是一个基类,它定义了一个名为speak()的抽象方法。Dog和Cat是Animal的子类,它们重写了speak()方法。当我们调用speak()方法时,它执行的实际上是子类中定义的方法。

🎋 特殊方法和属性的使用

在Python中,特殊方法和属性是与面向对象编程相关的重要概念。包括__init__()、str()、repr()、eq()等特殊方法和__doc__、namemodule、__class__等特殊属性。

以下是一个演示使用特殊方法和属性的示例:

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
        
    def __str__(self):
        return f'{self.title} by {self.author}'

    def __repr__(self):
        return f"{self.__class__.__name__}('{self.title}', '{self.author}', {self.pages})"
       
    def __eq__(self, other):
        if isinstance(other, Book):
            return self.pages == other.pages
        return False

book1 = Book('The Great Gatsby', 'F. Scott Fitzgerald', 218)
book2 = Book('To Kill a Mockingbird', 'Harper Lee', 281)

print(book1)
print(repr(book1))
print(book1 == book2)

在这个示例中,我们定义了一个Book类,并使用__str__()方法定义类的字符串表示形式。还使用__repr__()方法返回一个描述对象的字符串,它可以用来创建一个新的对象。最后,我们使用__eq__()方法来判断两个书籍是否相等,然后输出结果。

🎋 使用面向对象编程解决实际问题

面向对象编程可用于解决各种实际问题,如图形界面应用程序、游戏和网站开发等。下面是一个演示如何使用面向对象编程解决实际问题的示例:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
        
    def area(self):
        return self.width * self.height

class Square(Rectangle):
    def __init__(self, side):
        super().__init__(side, side)

class GUI:
    def __init__(self, width, height):
        self.rectangles = []
        self.mouse_x = 0
        self.mouse_y = 0
        self.width = width
        self.height = height
        
    def draw_rectangle(self):
        for rectangle in self.rectangles:
            print(f"Drawing rectangle ({rectangle.width} x {rectangle.height}) at ({self.mouse_x}, {self.mouse_y})")
            
    def add_rectangle(self, rectangle):
        self.rectangles.append(rectangle)
        
    def set_mouse_position(self, x, y):
        self.mouse_x = x
        self.mouse_y = y

gui = GUI(600, 400)

rect1 = Rectangle(100, 50)
rect2 = Square(75)

gui.add_rectangle(rect1)
gui.add_rectangle(rect2)

gui.set_mouse_position(200, 150)

gui.draw_rectangle()

在这个示例中,我们使用Rectangle和Square类表示矩形和正方形,并使用GUI类表示图形用户界面。在GUI类中,我们可以添加多个矩形,并在给定位置绘制它们。

🎋 面向对象设计原则

面向对象编程有许多设计原则,其中最常用的是SOLID原则。SOLID原则由Robert Martin提出,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则等。

以下是一个演示SOLID原则的示例:

class Plane:
    def fly(self):
        pass
        
class Jet(Plane):
    def fly(self):
        print("Jet flying")

class UFO(Plane):
    def fly(self):
        print("UFO flying")

class AirControl:
    def __init__(self):
        self.planes = []
        
    def add_plane(self, plane):
        self.planes.append(plane)
        
    def control_tower(self):
        for plane in self.planes:
            plane.fly()

air_control = AirControl()

jet = Jet()
ufo = UFO()

air_control.add_plane(jet)
air_control.add_plane(ufo)

air_control.control_tower()

在这个示例中,我们定义了五个类,Plane、Jet、UFO、AirControl和一个主函数。Jet和UFO类继承自Plane类,并实现了Plane类的fly()抽象方法。AirControl类是负责掌控所有飞机对象,并实现了一个control_tower()方法,用于控制所有飞机的飞行行为。主函数实例化了Jet和UFO类对象,并将它们添加到AirControl对象中。

这个示例遵循了SOLID原则中的单一职责原则,每个类都只负责一个特定的功能,且它们的职责清晰明了,隔离性强。此外,使用继承和多态实现了开闭原则和里氏替换原则,即可以扩展代码而不用修改原有代码,还可以在任何需要Plane类型的地方使用Jet和UFO对象。接口隔离原则也得到了遵循,每个类只暴露必要的接口,而不是暴露多余的接口。最后,依赖倒置原则有助于系统设计更加灵活和可扩展。

总之,以上示例展示了如何使用Python进行面向对象编程以及应用常见的面向对象设计原则,使得代码具有更好的可读性、可扩展性和易于维护性。

🎄 Python面向对象编程简单总结

这篇文章介绍了Python中的面向对象编程,并重点讲解了以下内容:

  • 面向对象编程的基本概念,包括类、对象、属性、方法、封装、继承和多态等。
  • 类和对象的创建,使用class关键字来定义类,然后实例化一个对象对属性和方法进行操作。
  • 属性和方法的定义,定义类的属性和方法,属性是类的特性,方法用于操作这些属性。
  • 封装、继承和多态的概念,封装可以保护数据和方法,继承可以从现有类中继承属性和方法,多态指的是不同的对象执行相同的操作会产生不同的结果。
  • 特殊方法和属性的使用,这些是与面向对象编程相关的重要概念。
  • 使用面向对象编程解决实际问题,例如图形界面应用程序、游戏和网站开发等。
  • 面向对象设计原则,SOLID原则是其中最常用的原则,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则等。

以上这些内容都可以通过在Python中编写代码来进行实践和学习,希望这篇文章可以给大家提供一些有价值的参考。

💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT Creator上位机画波形之Qcharts使用学习

先看一个Qcharts的简单demo Qcharts是QT自带的组件,不需要另外添加文件。 打开QT Creator,新建一个工程,命名可以参考下图: 基类选择QWidget: .pro文件中添加charts模块 main.cpp源码: #include "…

Nginx配置块location及rewrite详解

目录 一、location配置块详解 1.location 大致分为三类 2.location 常用的匹配规则 3.location 匹配的优先级 4.location 匹配流程 5.location 的实际使用 二、if 模块常用的nginx全局变量 三、rewrite详解 1.rewrite简介 2.rewrite实现跳转原理 3.rewrite 执行顺序 …

房企如何向制造业学习,提高运营效率,降本增效?

导语 | 近年来,随着外部环境的变化,国内的房地产市场受到了很大的冲击,也发生了显著的变化。很多人都认为房地产行业已经迎来了「青铜时代」甚至是「黑铁时代」,已由过去的「高杠杆、高增长、高利润」经营模式转变为「低利润、低增…

借助 VMware 技术加快数字化优先、客户至上的银行业的发展

迎接下一波客户至上的银行业创新浪潮 金融服务业对颠覆并不陌生。对于许多机构来说,新冠疫情的突然爆发,戏剧性地证明了运营敏捷性的价值。这些机构不仅加倍重视数字化体验,而且迅速适应了新情况:打破障碍,采用新技术…

【数据结构OJ题】链表带环问题

目录 1.判断链表是否带环 证明 2.寻找环的入口点 1.判断链表是否带环 原题链接:力扣 思路一:先遍历一遍链表,计算出链表的长度,然后将长度除二,在遍历半个链表即可。但是这种方法效率比较低。 思路二:…

【软考网络管理员】2023年软考网管初级常见知识考点(30)-文件管理与传送控制

涉及知识点 文件管理的概念,绝对路径和相对路径,设备管理,IO控制方式有哪些。 软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 原创于:CSDN博主-《拄杖盲学轻声码》,更…

天天做Web测试,咋还不知道怎么测试呢?

目录 前言: 一、UI测试 二、链接测试 三、搜索测试 四、表单提交测试 五、输入域测试 六、分页测试 七、兼容性测试 前言: Web测试是一个比较广泛的测试领域,涵盖的测试内容较多,包括功能测试、性能测试、安全测试等。 下面就说一…

Docker 新手向导

博文目录 文章目录 新手向导 (Get Started)应用程序容器化下载应用代码容器化该应用配置镜像加速器 启动这个应用容器 更新应用程序共享应用程序推送镜像Play with Docker使用镜像 持久化数据库容器的文件系统容器卷 (Container volumes)保留所有数据深入卷 使用绑定装载快速卷…

Android Jetpack Compose之TabRow的使用

Android Jetpack Compose是一个现代化的UI工具包,它让开发者可以以声明式的方式来构建出美观且功能强大的Android应用。在本文中,我们将详细介绍其中的一个重要组件——TabRow。 一. TabRow简介 TabRow是Jetpack Compose中的一个组件,主要用…

在家用电脑怎么赚钱,在家就能获得收益的三种方式

如何在家赚钱可能是许多人都困扰的问题之一。实际上,有很多在家赚钱的方法可供选择。然而,我在网上发现许多人缺乏学习的动力,不愿意承担风险,因此大约80%的人选择从事辛苦劳动或成为被剥削的人,导致他们连续几年在互联…

SpringBoot中的bean管理

一、获取bean 默认情况下&#xff0c;Spring项目启动时&#xff0c;会把bean都创建好放在IOC容器中&#xff0c;如果想要主动获取这些bean&#xff0c;可以通过如下方式: 根据name获取bean: object getBean (String name)根据类型获取bean: <T> T getBean (Class<…

8.1 PowerBI系列之DAX函数专题-进阶-解决列排序对计算的影响

需求 下列矩阵中&#xff0c;在月份列不按照原始数据的month_no排列时&#xff0c;能正确计算销售额占比&#xff0c;但是当月份按照month_no排序时就会出错&#xff0c;需要解决这个问题。 实现 month % divide([amount],calculate([amount],all(date[month desc]))) //排…

计算机网络—局域网

文章目录 ARP协议以太网以太网帧结构交换机交换机的端口划分 PPP协议 MAC地址 封装在链路帧中的地址&#xff0c;作为每一个接口的地址。&#xff08;一般是48bit大小&#xff09; MAC地址是刻画到我们物理接口上的&#xff0c;我们的网卡一旦出厂之后就会携带一个唯一的物理地…

升级HarmonyOS 3,通话一步切换更便捷

小伙伴们&#xff0c;今天和大家来聊聊HarmonyOS 3音频播控中心有哪些真香体验。不少朋友可能会脱口而出&#xff1a;一键切换音频App&#xff0c;一键实现音频跨设备流转&#xff0c;还有音频共享。这一次&#xff0c;音频播控中心又带来了新技能——一键切换通话音频。 相信大…

Java集合相关问题

java集合框架体系 数据结构 算法复杂度分析 时间复杂度分析&#xff1a;对代码运行时间所消耗时间多少进行分析空间复杂度分析&#xff1a;对代码运行所占用的内存的大小进行分析 时间复杂度 时间复杂度分析&#xff1a;来评估代码的执行耗时 假如执行每行代码的执行耗时一…

electron实现子窗口中创建右键菜单

后续可能会用electron开发一些工具&#xff0c;包括不限于快速生成个人小程序、开发辅助学习的交互式软件、帮助运维同学一键部署的简易版CICD工具等等。 开发进度&#xff0c;取决于我懒惰的程度。 不过不嫌弃的同学还是可以先关注一波小程序&#xff0c;真的发布工具了&…

Shopee(虾皮)运营没流量?没销量?只因你没掌握店铺引流方法大全

一、站内引流 - 类目 选品&#xff1a;侧重高性价比的潮流商品&#xff0c;及时上架销售热卖商品&#xff1b; 根据目标客户群选品&#xff1a;比如&#xff0c;如果60%-70%的用户为年轻女性&#xff0c;则关注性价比高的潮流商品&#xff1b; 根据重点品类选品&#xff1a;流…

C语言笔记-小智课堂-常用语法

嵌入式常用C语言语法 - 小智课程 类型&字节转换 define语法 define只是单纯替换&#xff0c;如果是运算记得加括号 防止多个文件调用重定义问题 define与typedef&#xff08;替换与别名&#xff09; enum语法 enum用于变量的枚举。 定义枚举类型的变量&#xff0c;变量…

MSP430G2553 Proteus仿真0~5V电压表数码管显示报警系统-0046

MSP430G2553 Proteus仿真0~5V电压表数码管显示报警系统-0046 Proteus仿真小实验&#xff1a; MSP430G2553 Proteus仿真0~5V电压表数码管显示报警系统-0046 功能&#xff1a; 硬件组成&#xff1a;51单片机 8位数码管MAX7219数码管驱动模块多个按键LED灯蜂鸣器 1.准确测量信…

43 # buffer 的应用

buffer Buffer 代表的都是二进制数据&#xff0c;代表是内存&#xff0c;它不能扩容&#xff08;java 数组不能扩容&#xff0c;想扩容可以使用动态数组&#xff0c;或者生成一个新的内存拷贝过去&#xff09; 服务端可以操作二进制&#xff0c;Buffer 可以和字符串进行相互转…