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) # 输出为:小明在玩洛克王国
                    结束执行
相关推荐
科大饭桶3 分钟前
C++入门自学Day11-- String, Vector, List 复习
c语言·开发语言·数据结构·c++·容器
范范之交7 分钟前
JavaScript基础语法two
开发语言·前端·javascript
Felven8 分钟前
C. Game of Mathletes
c语言·开发语言
点云SLAM30 分钟前
C++中内存池(Memory Pool)详解和完整示例
开发语言·c++·内存管理·内存池·new/delete·malloc/free
R-G-B1 小时前
OpenCV Python——Numpy基本操作(Numpy 矩阵操作、Numpy 矩阵的检索与赋值、Numpy 操作ROI)
python·opencv·numpy·numpy基本操作·numpy 矩阵操作·numpy 矩阵的检索与赋值·numpy 操作roi
细节处有神明1 小时前
Jupyter 中实现交互式图表:ipywidgets 从入门到部署
ide·python·jupyter
小小码农一只1 小时前
Python 爬虫实战:玩转 Playwright 跨浏览器自动化(Chromium/Firefox/WebKit 全支持)
爬虫·python·自动化
程高兴1 小时前
遗传算法求解冷链路径优化问题matlab代码
开发语言·人工智能·matlab
wow_DG1 小时前
【C++✨】多种 C++ 解法固定宽度右对齐输出(每个数占 8 列)
开发语言·c++·算法
CHEN5_022 小时前
【Java基础】反射,注解,异常,Java8新特性,object类-详细介绍
java·开发语言