python进阶——python面向对象

前言

Python是一种面向对象的编程语言,可在Python中使用类和对象来组织和封装代码。面向对象编程(OOP)是一种编程范例,它将数据和操作数据的方法封装在一个对象内部,通过对象之间的交互来实现程序的功能。

1、面向对象的定义

面向对象(Object-Oriented)编程是一种编程范式,它以"对象 "作为程序的基本单元,将数据(属性 )和操作数据的方法(行为)封装在一起,以此来模拟现实世界的事物和概念。面向对象的编程使得程序可以更加模块化、可扩展和可维护。

在用面向对象编程时,把现实世界中的某个事物封装为类(也可以理解为成模板)。当在程序中引用时,引用这个类的变量就是实例。

面向对象编程的核心核心概念有以下几个:对象封装继承多态

2、类与实例

类(Class):类是对象的定义,它描述了对象的属性和方法。类是创建对象的模板,定义了对象的行为和状态。

类的命名方式时首字母要大写,并且类的返回值是一个对象(实例)。

复制代码
# 定义了一个类MyClas
class MyClass:
    pass

print(type(MyClass)) 
# 输出:<class 'type'>

对象(Object):对象是类的实例,它具有类定义的属性和方法。对象是类的具体实体,通过实例化类来创建对象。

复制代码
# 定义了一个类MyClas
class MyClass:
    pass

# 使用一个变量去引用这个类,那么这个变量 my 就是实例
my = MyClass()

3、初始化函数(魔法函数)

  • 初始化函数

在Python中,初始化函数是一个特殊的方法,用于在创建对象时进行一些初始化操作。初始化函数的名称是**init(双下划线)**,它是所有类中必须定义的方法之一。

初始化函数在对象创建时自动调用,它接受self 参数作为第一个参数,表示正在创建的对象本身。其他参数可以根据类的需要来定义。

初始化函数的主要作用是初始化对象的属性。在初始化函数中,可以使用self.属性名来定义对象的属性,并为其赋初值。

例:

复制代码
class ATMan:
    """
    类:类型
    实例:输出的一种类的表现形式
    """
    
    def __init__(self, name, age):
        # self只的是本身使用这个函数的对象
        print(f"自身{self}", id(self))
        # name和age是形参
        self.name = name
        self.age = age


a = ATMan("塞罗", 18)
print(id(a))
# 输出:自身<__main__.ATMan object at 0x000001B4CFB60DD0> 1876090555856
1876090555856

通过id 可以知道,self 就是引用这个类的实例

  • 魔法函数

在Python中,魔法函数(Magic methods)是一类特殊的函数,它们以双下划线(__)开头和结尾,通常被称为双下划线方法或特殊方法。这些魔法函数在类中定义,用于定义类的行为和特性,使得类的实例可以表现得像内置类型一样。

  • init()

初始化函数,也是魔法函数。当创建一个类的实例时自动调用。用于初始化对象的状态。

  • str()

定义对象的"非正式"或友好的字符串表示,可以通过 str() 调用或者在 print() 中使用。

例:

复制代码
class MyClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"姓名:{self.name}"


my = MyClass("小明", 18)
print(my) # 输出:姓名:小明
  • len()

返回对象的长度,可以通过内置函数len()调用。

例:

复制代码
class MyClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __len__(self):
        return len(self.name)

my = MyClass("小明", 18)
print(len(my))  # 输出:2

等等。。。。。

4、构造函数和析构函数

构造函数 (Constructor): 构造函数是一种特殊的成员函数,用于创建对象时初始化对象的数据成员。构造函数的名称与类名相同,并且没有返回类型。构造函数可以有参数,也可以没有参数。如果没有定义构造函数,编译器会自动提供一个默认的构造函数。

例:

复制代码
class MyClass:

    # 构造初始化函数的self
    def __new__(cls, *args, **kwargs):
        instance = super().__new__(cls)
        # 这里可以添加一些初始化逻辑
        return instance

    def __init__(self):
        print("小明在玩洛克王国")

mc = MyClass()
print(mc) # 输出为:小明在玩洛克王国

析构函数(Destructor): 析构函数是一种特殊的成员函数,用于销毁对象时释放对象占用的资源。析构函数的名称与类名相同,前面加上一个波浪号(~)作为前缀,没有返回类型,也不接受任何参数。如果没有定义析构函数,编译器会自动提供一个默认的析构函数。

例:

复制代码
class MyClass:

    # 构造初始化函数的self
    def __new__(cls, *args, **kwargs):
        instance = super().__new__(cls)
        # 这里可以添加一些初始化逻辑
        return instance

    def __init__(self):
        print("小明在玩洛克王国")


    # 析构函数
    def __del__(self):
        print("结束执行")

mc = MyClass()
print(mc) # 输出为:小明在玩洛克王国
                    结束执行
相关推荐
前端世界17 分钟前
用Python手写一个能识花的感知器模型——Iris分类实战详解
开发语言·python·分类
少林and叔叔25 分钟前
基于yolov5.7.0的人工智能算法的下载、开发环境搭建(pycharm)与运行测试
人工智能·pytorch·python·yolo·目标检测·pycharm
心.c32 分钟前
深拷贝浅拷贝
开发语言·前端·javascript·ecmascript
曦樂~34 分钟前
【Qt】启动新窗口--C/S传输信息
开发语言·qt
源代码•宸34 分钟前
Qt6 学习——一个Qt桌面应用程序
开发语言·c++·经验分享·qt·学习·软件构建·windeployqt
寻找华年的锦瑟36 分钟前
Qt-UDP
开发语言·qt·udp
橘颂TA38 分钟前
【QSS】软件界面的美工操作——Qt 界面优化
开发语言·qt·c/c++·界面设计
合作小小程序员小小店1 小时前
旧版本附近停车场推荐系统demo,基于python+flask+协同推荐(基于用户信息推荐),开发语言python,数据库mysql,
人工智能·python·flask·sklearn·推荐算法
动能小子ohhh1 小时前
Langchain从零开始到应用落地案例[AI智能助手]【3】---使用Paddle-OCR识别优化可识别图片进行解析回答
人工智能·python·pycharm·langchain·ocr·paddle·1024程序员节
Evand J1 小时前
【MATLAB例程】二维环境定位,GDOP和CRLB的计算,锚点数=4的情况(附代码下载链接)
开发语言·matlab·定位·toa·crlb·gdop