Python | 五、面向对象(封装、继承、多态)、Class类

本文介绍了面向对象编程的核心概念,包括如何通过类、属性和方法表示事物,以及封装、继承和多态的原理和应用。重点讲解了Python中的类定义、隐藏属性的保护、继承避免代码冗余以及多态带来的灵活性。
摘要由CSDN通过智能技术生成

面向对象

  • 各类事物在编程语言中可以表示为抽象的类
    • 属性用来表示类的基本特征
    • 方法用来实现类的基本功能
  • 为了把事物具体化,需要通过创建实例化对象来完成
  • 面向对象的三大特性(下文对每个特性会做详细介绍)
    • 封装
    • 继承
    • 多态

Class类的定义

  • 命名,使用大驼峰标准,如class MyName:
  • class类中有一个self参数,这个参数是Python自动管理的,当所创建的实例化对象调用类中方法时,Python会自动把该实例对象传递给该方法的self形参;因此,一般类中所有的方法都会在定义时包含一个self形参
  • class类中应该有一个初始化方法def __init__(self, variable):,该方法会在每次实例化对象的时候被自动调用,从而对实例对象的一些属性进行初始化,__init__初始化属性所使用的值即为创建实例化对象语句的括号中传入的值,如name = MyName('David')
  • call 方法是 Python 中一个特殊的魔法方法,允许类的实例像函数一样被调用。也就是说,当你给一个对象加上括号(())时,Python 会自动调用该对象的 call 方法
    • call方法代码示例见下
class MyCallableClass:
    def __init__(self, name):
        self.name = name
    
    def __call__(self, greeting):
        return f"{greeting}, {self.name}!"

# 创建一个类的实例
my_obj = MyCallableClass("Alice")

# 调用对象实例,实际上是调用了 __call__ 方法
print(my_obj("Hello"))  # 输出: Hello, Alice!

封装

  • 为什么要封装?
    • 一个主要目的就是保护类内某些数据的安全性
  • 怎么保护数据安全性
    • 第一步,将属性定义为隐藏属性,即在定义时在属性名前加双下划线,如__hidden_variable = 1,这种属性是无法在实例对象上通过对象.属性的方式读取和修改的
    • 第二步,如果想要读取和修改隐藏属性,需要在类内定义对应的方法,如图所示
      • 读取和修改隐藏属性

继承

  • 为什么要继承?
    • 一个主要原因就是避免重复代码的书写,当一个子类和父类有相同的操作时,可以通过继承父类直接复用父类里对应操作的定义
  • 怎么继承
    • 在定义子类时,如class son:,改为,class son(father):,此时,子类son将继承father里的全部属性和方法
  • 继承的特点
    • 在继承后,当子类的实例化对象调用一个方法时,将首先在子类中搜寻,如果子类没有,去父类搜寻,如果父类也没有,就去父类的父类搜寻,以此类推;所以,继承是优先使用自己的,如果自己没有再采用父辈的
  • super()
    • 在定义子类的时候,对于没有重定义的属性或方法,将默认继承父类;而对于重定义的一些属性和方法,如果只是想要在父类对应方法上进行扩展,可以先使用super().method()的方式继承(调用)父类的对应method定义,再在之后加上自己的扩展代码
    • 如图所示,父类中的__init__方法只初始化了type和color两个属性,而子类在此基础上扩展定义了radius属性,因此可以利用super来在保留父类方法的同时扩展自己的方法super的使用

多态

  • 为什么要有多态这个特性?
    • 不需要纠结函数名的定义了
  • 定义
    • 简单来说,多态就是指 不同类 或 一个类自己内部 的方法名称相同,但是形参和函数体不同,如一个类内同时定义了def add(self, a, b):def add(self, a, b, c):,若传入三个实参,将调用后者,传入两个实参,将调用前者
    • 这种情况下,解释器将根据实例对象的类型、传入实参的不同选择对应的方法进行调用,此时就不需要对功能类似的方法定义多种不同的方法名了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值