一篇文章彻底弄懂 Python 面向对象编程

本文介绍了面向对象编程的基本概念,包括类和对象的区别,Python中类的设计(如类名、属性和方法)、构造方法(__init__)、私有属性和方法以及封装、继承、多态和抽象类等核心特性。通过实例演示展示了如何在Python中创建类、对象和使用这些特性。
摘要由CSDN通过智能技术生成

基本概念

面向对象编程,是许多编程语言都支持的一种编程思想。

简答理解就是,基于类去创建对象,使用对象完成功能开发。

目前通用的编程方式分为两种:面向过程编程面向对象编程。 简单介绍一下两种编程方式:

面向过程
做法
  1. 把完成某个需求的所有步骤从头到尾的实现
  2. 根据开发需求,将某些独立的代码封装成一个又一个的函数
  3. 最后完成的代码,就是顺序的调用不同的函数
特点
  1. 注重步骤和过程,不注重职责和分工
  2. 如果需求复杂,代码也会变得复杂
  3. 开发复杂的项目,没有固定的套路,开发难度大
面向对象
做法
  1. 开发需求前,首先确定职责 ---- 要做的事情
  2. 根据职责确定不同的对象,在对象内部封装不同的方法
  3. 最后完成的代码,就是顺序的让不同的对象调用不同的方法

相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法

特点
  1. 注重 对象和职责, 不同的对象承担不同的职责
  2. 更加适合应对复杂的需求变化,是专门应对复杂的项目开发,提供的固定套路

简而言之,就是程序中所有的操作,都是通过对象来完成的。计算机程序本质是对现实事物的抽象。一个人,一辆车,一只狗,这些都是对象,而这些对象发出的动作就是对象的方法,某些特征就是对象的属性。比如一个人,他的身高,长相,姓名,年龄等这些在对象中都是他的属性,而他发出的动作,走,跑,说话等这些在对象中都是他的方法。

面向对象的核心概念

对象是面向对象编程的两个核心概念。

是对一群具有相同特征或行为的事物的一个统称,是抽象的,不能直接使用,特征类的属性,行为是类的函数方法。

对象是由类创造出来的一个具体的存在,可以直接使用。由哪一个类创造出来的对象,就拥有哪一个类中定义的属性和方法

Python 程序开发中,设计一个类的三要素:
  1. 类名 这类事物的名字,满足大驼峰命名法(EventBus)
  2. 属性 这类事物具有的特征
  3. 方法 这类事物具有的行为

基本语法

创建一个简单的类
class 类名:
    def 方法1(self, 参数列表):
        pass
        
    def 方法2(self, 参数列表):
        pass

对象变量 = 类名()

Python 定义类的方法时,第一个参数必须是 self。调用方法时,不需要传递self

self 哪一个对象调用的方法,self就是哪一个对象的引用。

在方法内部可以通过self.访问对象的属性,也可以通过self.调用对象的其它方法。

构造方法

Python中通过__init__构造方法对成员变量进行赋值。

特点

  1. 创建类对象的时候,会自动执行;
  2. 创建类对象的时候,将传入参数自动传递给__init__方法使用。
基本使用
class Person:
    # 初始化方法,自动调用
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 自定义方法
    def show(self):
        print(f'我的名字叫{self.name},今年{self.age}岁')

使用类创建对象,通过:

person1 = Person('小明', 18)
person1.show() # 我的名字叫小明,今年18岁

person2 = Person('小红', 17)
person2.show() # 我的名字叫小红,今年17岁

在这个类中,定义的__init__ 方法,表示初始化使用方法,在对象初始化的过程中,会直接调用,跟其他语言中的 constructor初始化函数功能是相同的。

我们通过实例化的两个对象person1person2,是通过同一个类创建的,但是内存地址不同。每次创建的都是一个新的对象,开辟新的内存空间存储。

类对象的生命周期

  • 一个对象从调用类名()创建,生命周期开始,会为对象分配内存空间,自动调用__init__方法;
  • 一个对象的__del__方法一旦被调用生命周期就结束,也就对象在内存中被销毁了,对象销毁前会自动调用__del__方法;
  • 在对象的生命生命周期内,可以访问对象的属性或者方法,一旦对象销毁,就不能在调用。

__str__ 也是类中,自动会执行的方法,我们在打印对象的时候,可以通过__str__方法控制打印输出的返回值。

面向对象的三大特征

封装

封装是指隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。在Python中,这通常是通过将属性设置为私有(使用双下划线前缀)来实现的,而公开的方法则作为接口供外部调用。封装可以提高代码的安全性,防止外部代码随意访问和修改对象的内部状态。

简答描述就是将现实世界事物的属性和方法 ,封装到类中,表示为成员变量和成员方法 ,从而完成程序对现实世界事物的描述。

私有成员

现实世界中事物有不公开的行为,比如在手机这个事物中,颜色、尺寸、拍照、上网都是公开给用户的,但是,比如像内存调度,CPU,系统等是不公开的,那么对于程序中的映射也是支持私有属性及方法的。

Python中定义私有成员变量及方法,只需要在变量和方法前面加上__双下划线。比如:__cpu

__schedule_memory

Python中使用私有的成员属性和方法时,在类内部使用可以正常访问,创建的类对象使用会报错。

基本使用
class Phone:
    __voltage = 220

    def __schedule_memory(self):
        print('内存调度')

    def call(self):
        if(self.__voltage > 1):
            print('通话')
        else:
            print('电压不足,无法通话')

phone = Phone()
phone.__schedule_memory() # 报错
phone.call()

内部变量__voltage,可以在内部call方法中使用。

私有成员变量使用的意义在于,在类中提供仅供内部使用的属性和方法,而不对外开放(类对象无法使用)。

继承

继承是从已有的类创建新类的过程。在Python中,通过class关键字定义新类,并使用括号将父类名放在新类名的后面,就可以实现继承。子类可以继承父类的所有属性和方法,并可以添加或覆盖自己的属性和方法。继承可以重用代码,提高代码的可维护性和可扩展性。

继承表示:将从父类哪里继承(复制)来成员变量和成员方法(不含私有)。

基本使用

单继承

class ApplePhone:
    def __init__(self):
        self.color = 'black'
        self.dpr = 2

    def call_by_4g(self):
        print('4g通话')

class ApplePhone2022(ApplePhone):
    def __init__(self):
        super().__init__()
        self.face_id = True

    def call_by_5g(self):
        print('5g通话')

apple_phone = ApplePhone2022()
print(apple_phone.color)
apple_phone.call_by_4g()

多继承

class ApplePhone:
    def __init__(self):
        self.color = 'black'
        self.dpr = 2

    def call_by_4g(self):
        print('4g通话')

class NFCReader:
    def nfc_read(self):
        print('nfc读卡')

class ApplePhone2022(ApplePhone, NFCReader):
    def __init__(self):
        super().__init__()
        self.face_id = True

    def call_by_5g(self):
        print('5g通话')

apple_phone = ApplePhone2022()
apple_phone.nfc_read()

ApplePhone2022类在继承多个类的时候,仅需要将ApplePhone, NFCReader通过逗号隔开类名。如果继承的多个类,有重名的属性或方法,谁先继承,谁的优先级更高。

属性方法重写
class ApplePhone:
    def __init__(self):
        self.color = 'black'
        self.dpr = 2

    def call_by_4g(self):
        print('4g通话')

class ApplePhone2022(ApplePhone):
    def __init__(self):
        super().__init__()
        self.color = 'white'
        self.face_id = True

    def call_by_4g(self):
        # 如果还需要父类的方法
        super().call_by_4g()
        print('4g通话---重写')

    def call_by_5g(self):
        print('5g通话')

apple_phone = ApplePhone2022()
print(apple_phone.color) # white
apple_phone.call_by_4g() # 4g通话---重写

属性和方法的重写,只需要在继承的子类中,定义重名的属性或方法就可实现重写。如果还需要父类中的方法,通过super().call_by_4g()去调用。

多态

多态是指允许不同类的对象对同一消息作出响应。在Python中,多态通常是通过方法的重写(Overriding)和方法的重载(Overloading)来实现的。重写是指子类可以覆盖父类的方法,使得当子类对象调用该方法时,执行的是子类的方法。重载是指同一个方法名可以对应多个不同的实现,根据参数的类型和数量来确定调用哪个实现。多态可以提高代码的灵活性和可扩展性

多态表示:多种状态,即完成某个行为时,使用不用的对象会得到不同的状态。

即同样的行为,使用不同的对象,获得不同的运行状态。

多态常用在继承关系上,比如

  • 函数形参声明接收父类对象
  • 实际传入父类的子类对象进行工作,获得同一行为的不同状态
抽象类

抽象类:含有抽象方法的类

抽象方法:方法体是空实现的方法(pass)

设计含义:

  1. 父类确定有哪些方法
  2. 具体的实现方法,由子类决定

这种写法被称为抽象类(接口),一般用来做顶层设计。子类用来实现功能。

基本使用
#  抽象类,用来做顶层设计
class Animal():
    # 抽象方法,空实现
    def speak(self`):`
        pass

class Dog(Animal):
    def speak(self):
        print('汪汪汪')

class Cat(Animal):
    def speak(self):
        print('喵喵喵')

def speak(animal: Animal):
    animal.speak()

dog = Dog()
cat = Cat()
speak(dog)
speak(cat)

---------------------------END---------------------------

题外话

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img

二、Python兼职渠道推荐*

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

Python面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作封装在对象中,通过对象之间的交互实现程序的设计和开发。下面是一些关键概念,帮助你更好地理解Python面向对象编程。 1. 类(Class):类是对象的蓝图或模板,描述了对象的属性和行为。它定义了对象的特征和方法。例如,我们可以定义一个名为"Car"的类来表示汽车,其中包含属性(如颜色、型号)和方法(如加速、刹车)。 2. 对象(Object):对象是类的实例,是具体的实体。通过实例化类,我们可以创建一个对象。例如,我们可以创建一个名为"my_car"的对象,它是基于"Car"类的实例。 3. 属性(Attribute):属性是对象的特征,用于描述对象的状态。每个对象都可以具有一组属性。例如,"Car"类的属性可以包括颜色、型号等。 4. 方法(Method):方法是对象的行为,用于定义对象的操作。每个对象都可以具有一组方法。例如,"Car"类的方法可以包括加速、刹车等。 5. 继承(Inheritance):继承是一种机制,允许我们创建一个新类(称为子类),从现有类(称为父类)继承属性和方法。子类可以扩展或修改父类的功能。继承可以实现代码重用和层次化设计。 6. 多态(Polymorphism):多态是一种特性,允许不同类的对象对同一方法做出不同的响应。多态提高了代码的灵活性和可扩展性。 7. 封装(Encapsulation):封装是一种将数据和操作封装在对象中的机制,隐藏了对象的内部实现细节,只暴露必要的接口给外部使用。这样可以保护数据的安全性,提供了更好的模块化和代码复用性。 通过理解这些概念,你可以更好地掌握Python面向对象编程。在实践中,你可以使用类来创建对象,操作对象的属性和调用对象的方法,通过继承和多态实现代码的灵活性和可扩展性,通过封装保护数据的安全性和提高代码的可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值