一文读懂—面向对象

目录

一,何为面向对象?

1.何为类?

2.何为实例?

3.何为面向对象?

4.类与实例的声明

二,类中常用的函数

1.初始化与字符串表示函数

<1>初始化函数

<2>字符串表示函数

2.构造函数与析构函数

<1>构造函数

<2>析构函数

3.其他的一些魔法函数

三,面向对象的三要素

1.封装

2.继承

3.多态


一,何为面向对象?

1.何为类?

类是面向对象编程中的一个概念,指的是一类具有相同属性和行为的对象的抽象。类可以看作是一种模板或蓝图,描述了对象的属性和方法。通过定义一个类,可以创建多个具有相同属性和行为的对象。类由属性和方法构成,属性用于描述对象的特征,方法用于描述对象的行为。通过实例化类,可以创建对象,并对对象进行操作。类是面向对象编程中封装、继承和多态的基础。

2.何为实例?

实例是指在编程中创建的一个具体对象。在面向对象的编程中,类是一种模板或规范,描述了对象的属性和方法,而实例是根据类创建出来的具体对象。每个实例都有自己独立的属性值,可以调用类中定义的方法来操作这些属性。通过实例化多个对象,可以同时处理不同的数据和逻辑,实现代码的复用和扩展。

3.何为面向对象?

面向对象编程,简单来说,就是对对象进行操作,对象的属性和功能又由类来规定

它将程序的功能划分为一个个相互独立的对象,并通过对象之间的交互来实现程序的功能。

在面向对象编程中,对象是程序的基本单位,它具有状态(属性)和行为(方法)。对象可以根据定义的类(Class)进行创建,类是对象的抽象描述,包括了对象的属性和方法的定义。通过类的实例化,可以创建具体的对象。

4.类与实例的声明

class Person:
    '''
    声明一个类:Person  要用class 类名(一般类名首字母要大写)
    '''
    pass
    
    
# 实例如何定义  变量名 = 类名(初始化时要赋值的实参)
a = Person()

二,类中常用的函数

1.初始化与字符串表示函数

<1>初始化函数

初始化函数的作用是在对象创建时进行一些必要的初始化操作,比如给对象的属性赋初始值。初始化函数在类的定义中以__init__来命名,它接受的参数包括self和其他需要初始化的参数。

<2>字符串表示函数

__str__是一个特殊的方法,用于返回一个对象的字符串表示形式。__str__方法应该返回一个字符串,描述该对象的特征和状态

返回内容可以自定义 

class Person:
    '''
    声明一个类:Person  要用class 类名(一般类名首字母要大写)
    '''

    def __init__(self, name, age):
        '''
        self 就是未来的实例
        初始化self也等同于初始化未来的实例
        '''
        # print(f'我是人')
        self.name = name
        self.age = age

    def __str__(self):
        return f"姓名:{self.name} 年纪:{self.age}"
    
# 实例如何定义  变量名 = 类名(初始化时要赋值的实参)
a = Person('小龙', 20)

这里封装了一个“人”类,在初始化类中规定了   self(也就是未来的实例)要有  name  age   这两个属性

而  a = Person('小龙', 20) 则是该类的一个实例,因为类规定了要有两个形参,所以要带有两个实参

字符串表示函数,则返回了实例的姓名和年纪,这样就可以直接打印实例的姓名和年纪,可以更加清楚的知道实例的这些属性

print(p)

返回值为

姓名:小龙 年纪:20

2.构造函数与析构函数

<1>构造函数

构造函数一般用来构造初始化函数中的  self  的,如果不设置的话,就默认该类的父类中去调用

构造函数用__new__来定义

class MyClass:

    def __new__(cls, *args, **kwargs):
        # pass# 当构造函数内没有内容时,初始化函数就不再执行
        instance = super().__new__(cls)
        # 这里从该类的父类中构造了一个self 与默认不设置构造函数时一样
        # 构造函数之后要返回
        return instance

    def __init__(self):
        print(f'初始化函数执行了')

    

mc = MyClass()


 

<2>析构函数

析构函数:当实例不在使用,把实例清空删除,释放空间

使用__del__来定义

析构函数使用场景:

  1. 资源释放:当一个对象在使用过程中申请了一些资源,比如内存、文件句柄等,需要在对象被销毁时释放这些资源。这时可以在析构函数中编写释放资源的代码。
  2. 日志记录:当一个对象被销毁时,可以在析构函数中记录日志,用于调试或跟踪对象的生命周期。
  3. 还原状态:当一个对象被销毁时,可以在析构函数中还原对象的状态或环境,以保证后续操作的正确性

3.其他的一些魔法函数

以双下划线开头和结尾,__函数名__

魔法函数不需要自己调用,当满足一定触发条件时,自动触发使用

除了上述的   初始化函数___int__  字符串表示函数__str__    构造函数__new__   析构函数__del__

这些常用的外,还有:

比较
__eq__  使用 == 时触发
__ne__  使用 != 时触发

__gt__  使用 > 触发
__ge__  使用 >= 触发
__lt__  使用 < 触发
__le__  使用 <= 触发

计算
__add__  使用+触发
__sub__  使用-触发
__mul__  使用*触发
__truediv__  使用/触发
__floordiv__  使用//触发
__mod__  使用%触发
__divmod__ 使用div(x,y)触发

三,面向对象的三要素

1.封装

面向对象的封装是指将数据和操作封装在一个对象中,通过定义公共接口对外提供访问和操作数据的方式,同时隐藏了对象内部的实现细节。封装实现了数据的隐藏和保护,使得对象的属性和方法只能通过定义的接口进行访问,而无法直接操作。

封装的主要目的是保护对象的状态,确保对象的数据不会被意外修改或破坏,提高代码的可维护性和可复用性。通过封装,对象的内部实现可以根据需要进行修改,而不会影响到外部使用该对象的代码。

封装也可以实现信息隐藏,将对象的内部细节隐藏起来,只暴露必要的接口,减少了代码的耦合性,提高了代码的可读性和安全性。

在封装的过程中,常用的实现手段是定义类和访问修饰符。类是封装的基本单位,将数据和方法封装在一起,通过实例化对象来使用。访问修饰符用于控制成员的访问权限,提供了公共访问和私有访问的方式,以实现对数据的保护和隐藏。常用的访问修饰符包括public、private和protected。

总之,面向对象的封装是将数据和操作封装在对象中,通过定义公共接口对外提供访问和操作数据的方式,实现了数据的隐藏、保护和信息隐藏,提高了代码的可维护性、可复用性、可读性和安全性。

2.继承

继承是面向对象编程中的一种机制,通过它可以使一个类(称为子类)获取另一个类(称为父类)的属性和方法。子类可以继承父类的公有属性和方法,并可以重写或扩展这些属性和方法,从而实现代码的复用和功能的扩展。

在继承关系中,父类的属性和方法被继承下来后,子类可以直接使用父类的这些属性和方法,不需要重新定义或实现。这样可以大大减少开发过程中的代码冗余,提高代码的可读性和可维护性。

继承可以分为单继承和多继承。单继承指一个子类只能继承一个父类,多继承指一个子类可以继承多个父类。在单继承中,子类只能继承一个父类的属性和方法。在多继承中,子类可以继承多个父类的属性和方法,但需要注意解决可能发生的命名冲突问题。

继承的好处在于提高了代码的可复用性和可扩展性。通过继承,可以将共性的代码放在父类中,子类只需关注自己特有的属性和方法,减少了代码的重复编写。同时,当需要对已有的类进行功能扩展时,只需在子类中添加或重写相关的属性和方法即可,不会影响到父类和其他的子类。这样可以大大减少了代码的维护成本。

继承的一个重要概念是“is-a”关系,即子类是父类的一种特殊形式。例如,一个狗类(Dog)可以继承一个动物类(Animal),因为狗是一种动物。通过继承,可以实现更加抽象和通用的代码设计,提高了代码的可读性和可理解性。

总之,继承是面向对象编程的重要概念之一,通过它可以实现代码的复用和功能的扩展。在继承的过程中,子类可以继承父类的属性和方法,并且可以重写或扩展这些属性和方法,从而实现对代码的灵活使用和改造。

3.多态

多态是面向对象编程的一个重要特性,它允许使用一个父类类型的引用变量来引用子类类型的对象,从而实现方法的动态绑定。多态的特点是编译时不确定具体调用的方法,而是在运行时根据实际对象类型来确定调用的方法。

多态可以提高代码的灵活性和可扩展性,可以实现代码的解耦和重用。通过多态,可以通过父类类型的引用变量调用子类类型所特有的方法,同时可以统一处理不同子类对象的共同属性和行为。

在实现多态的过程中,需要满足两个条件:继承关系和方法重写。只有在存在继承关系的父类和子类中,且父类中的方法被子类重写后,才能实现多态。

多态可以通过抽象类和接口来实现。抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类中可以定义抽象方法,而抽象方法没有具体的实现,需要在子类中实现。接口是一种抽象数据类型,它定义了一组方法的集合,但没有具体的实现。一个类可以实现多个接口,从而实现多态。

总之,多态是面向对象编程的一个重要特性,在代码设计和开发中起着重要的作用,可以提高代码的灵活性和可扩展性。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值