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) # 输出为:小明在玩洛克王国
                    结束执行
相关推荐
远望清一色5 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself15 分钟前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
小码的头发丝、22 分钟前
Django中ListView 和 DetailView类的区别
数据库·python·django
XiaoLeisj26 分钟前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
杜杜的man30 分钟前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*30 分钟前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go
半桶水专家31 分钟前
go语言中package详解
开发语言·golang·xcode
llllinuuu32 分钟前
Go语言结构体、方法与接口
开发语言·后端·golang
cookies_s_s33 分钟前
Golang--协程和管道
开发语言·后端·golang
王大锤439134 分钟前
golang通用后台管理系统07(后台与若依前端对接)
开发语言·前端·golang