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) # 输出为:小明在玩洛克王国
                    结束执行
相关推荐
Kai HVZ10 分钟前
python爬虫----爬取视频实战
爬虫·python·音视频
古希腊掌管学习的神13 分钟前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode
赵钰老师13 分钟前
【R语言遥感技术】“R+遥感”的水环境综合评价方法
开发语言·数据分析·r语言
m0_7482448315 分钟前
StarRocks 排查单副本表
大数据·数据库·python
就爱学编程21 分钟前
重生之我在异世界学编程之C语言小项目:通讯录
c语言·开发语言·数据结构·算法
B站计算机毕业设计超人22 分钟前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
路人甲ing..25 分钟前
jupyter切换内核方法配置问题总结
chrome·python·jupyter
游客52036 分钟前
opencv中的常用的100个API
图像处理·人工智能·python·opencv·计算机视觉
Oneforlove_twoforjob44 分钟前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存
emoji1111111 小时前
前端对页面数据进行缓存
开发语言·前端·javascript