程序猿大战Python——面向对象——魔法方法

news2024/11/26 0:23:31

什么是魔法方法?

==目标:==了解什么是魔法方法?

魔法方法指的是:可以给Python类增加魔力的特殊方法。有两个特点:

(1)总是被双下划线所包围;

(2)在特殊时刻会被自动调用,不需要开发者手动去调用。

魔法方法语法:

__魔法方法名__()

在Python中,常用的魔法方法有:

魔法方法名描述信息
__init__(self [, ...])构造器,当一个对象被初始化创建时,会被自动调用。
__str__(self)输出对象名时,若不想直接输出内存地址值,可重写str()方法。
__del__(self)当一个对象被删除或销毁时,会被自动调用。

==总结:==

(1)魔法方法的前后,总是被()包围着;==A、双下划线==;B、单下划线;

(2)注意:魔法方法会在某些特殊时刻被自动调用。

无参__init__()方法

==目标:==掌握无参__init__()方法的使用。

在Python中,当新创建一个对象时,则会自动触发__init__()魔法方法。

魔法方法名描述信息
__init__(self [, ...])构造器,当一个对象被初始化创建时,会被自动调用。

根据是否给__init__()魔法方法传递参数值,可分为:

(1)无参__init__()方法

(2)有参__init__()方法

无参__init__()方法语法:

class 类名:
    def __init__(self):
        代码
        ...

说明:当仅需在类内部使用与初始化属性时,可以使用该方法。

例如,一起来完成:

(1)给小轿车这个对象默认设置颜色和轮胎数为:黑色、3个轮胎;

(2)创建对象后,直接获取属性结果。

# 定义Student类
# class Student:
#     def __init__(self):
#         print("执行了init...")
​
# init
# 创建对象
# stu = Student()  # 创建对象时,会自动调用Init方法
# stu.__init__()
​
# 1.定义类: 默认设置属性
class MyCar:
    def __init__(self):
        # 默认设定
        self.color = "黑色"
        self.number = 3
​
    def func(self):
        print("============================")
        print(f"颜色:{self.color}")
        print(f"轮胎数:{self.number}")
        print("============================")
​
# 2.在类的外部访问属性
my_car = MyCar()
# print(my_car.color)
# print(my_car.number)
​
# 3.类内部访问属性
my_car.func()

==总结:==

(1)当创建对象时,会()执行__init__()方法;A、自动调用;B、不调用;

(2)注意:建议自定义的类中,有一个__init__()魔法方法。

==休息一下,15:40继续上课。==

有参__init__()方法

==目标:==掌握有参__init__()方法的使用。

当想要在创建对象时,就设定属性值时,可以使用有参__init__()方法。语法:

class 类名:
    def __init__(self, 参数1, 参数2,...):
        代码
        ...

说明:

(1)不需要给self传递参数值;

(2)传递参数个数的计算公式为【传递参数个数 = 定义方法后的参数总个数 - 1】。

例如,一起来完成:

(1)直接在创建车对象时,初始化设定颜色、轮胎数值;

(2)在类外部直接获取对象属性值。

# 1.定义类、方法
class Car:
    def __init__(self,color,number):   # 属性名会与传递的参数名名称保持一致
        self.color = color
        self.number = number
​
​
# 2.创建对象
car = Car("黑色",4)
# 3.获取值
print(f"颜色:{car.color}")
print(f"轮胎个数:{car.number}")

==总结:==

(1)__init__()方法可以用来设置属性的默认值;

(2)注意:当要在创建对象时,直接设定属性值,则可以通过有参__init__()方法传递参数值来处理。

__str__()方法

==目标:==掌握__str__()方法的使用。

内存地址值,也称为引用。表现形式有两种:

(1)十进制数 5040624,id()函数

(2)十六进制数 0x45AC6

说明:当直接输出对象名时,默认输出的是对象的内存地址值。

当在类中定义了__str__方法,则获取的是该方法返回的数据结果。

魔法方法名描述信息
__str__(self)输出对象名时,若不想直接输出内存地址值,可重写str()方法。

__str__方法语法:

class 类名:
    def __str__(self):
        代码
        ...
        return 字符串型的结果

说明:必须返回字符串型的结果。

例如,一起来完成:

(1)创建一个有两个参数的小轿车对象,直接输出对象名,观察结果;

(2)思考:在输出小轿车对象名时,如何把颜色、轮胎数显示出来?

# 1.定义类
class Car:
    def __init__(self,color,number):
        self.color = color
        self.number = number
​
    def __str__(self):
        # return "颜色:"+self.color
        return "颜色:"+self.color+",轮胎数:"+str(self.number)
​
# 2.输出对象名  -内存地址值
car = Car("白色",4)
# print(car)  # <__main__.Car object at 0x000001FBBCA72DF0>
# 3.如何显示
print(car)
# 总结
# 1.当直接输出对象名时,输出内存地址值,则表示没有重写str方法
# 2.当输出对象名不显示内存地址值, 重写了str方法

==总结:==

(1)注意:当没有重写__str__()方法时,输出对象名,则直接输出对象的()。==A、内存地址值==;B、属性名;

__del__()方法

==目标:==了解__del__()方法的使用。

当删除对象时,会自动调用__del__()方法。

魔法方法名描述信息
__del__(self)当一个对象被删除或销毁时,会被自动调用。

__del__()方法语法:

class 类名:
    def __del__(self):
        代码
        ...

例如,一起来完成:

(1)定义一个有品牌属性的车类;

(2)创建对象后,输出属性值;

(3)再使用__del__()方法删除对象查看效果;

(4)思考:当不调用【del 对象名】,__del__()方法会自动调用执行吗?

# 1.定义类
class Car:
    def __init__(self,brand):
        self.brand = brand
​
    def __del__(self):
        print("=========__del__===========")
​
# 2.创建对象
car = Car("BMW")
# 删除 -内存
# del car   # 注释
print(car.brand)
# 3.查看del
# 注意: 为了能更方便的查看del效果, 建议使用 del xx语法

==总结:==

(1)当使用【del 对象名】时,自动调用了__del__()方法;

(2)注意:当程序执行结束时,Python垃圾回收器会自动销毁内存垃圾,此时会自动调用__del__()方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1852374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Clonable接口和拷贝

Hello~小伙伴们&#xff01;本篇学习Clonable接口与深拷贝&#xff0c;一起往下看吧~(画图水平有限&#xff0c;两张图&#xff0c;&#xff0c;我真的画了巨久&#xff0c;求路过的朋友来个3连~阿阿阿~~~) 目录 1、Clonable接口概念 2、拷贝 2、1浅拷贝 2、2深拷贝 1、Clon…

利用竞争智慧与大型语言模型:假新闻检测的新突破

Explainable Fake News Detection With Large Language Model via Defense Among Competing Wisdom 论文地址: Explainable Fake News Detection with Large Language Model via Defense Among Competing Wisdom | Proceedings of the ACM on Web Conference 2024https://dl.…

国企:2024年6月中国移动相关招聘信息 二

在线营销服务中心-中国移动通信有限公司在线营销服务中心 硬件工程师 工作地点:河南省-郑州市 发布时间 :2024-06-18 截至时间: 2024-06-30 学历要求:本科及以上 招聘人数:1人 工作经验:3年 岗位描述 1.负责公司拾音器等音视频智能硬件产品全过程管理,包括但…

【前端vue3】TypeScrip-Class类用法

类型声明 TypeScrip定义Class类 语法&#xff1a; // 定义一个名为 Person 的类 class Person {constructor () {// 构造函数&#xff1a;稍后定义}run () {// 方法&#xff1a;稍后定义} }在TypeScript是不允许直接在constructor 定义变量的 需要在constructor上面先声明 例…

【递归、搜索与回溯】floodfill算法一

floodfill算法一 1.floodfill算法简介2.图像渲染3.岛屿数量4.岛屿的最大面积 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.floodfill算法…

AI视频教程下载-与ChatGPT结合的UX用户体验/UI用户界面设计策略

Revolutionize UX_UI_ AI-Design Strategies with ChatGPT 提升你的设计工具包&#xff1a;使用ChatGPT、Figma和Miro的AI驱动UX/UI策略 50个创新UX提示 了解人工智能的基础知识。介绍ChatGPT及其底层技术。区分不同AI模型及其在设计中的应用。将AI工具融入设计工作流程的策略…

摄像头画面显示于unity场景

&#x1f43e; 个人主页 &#x1f43e; &#x1faa7;阿松爱睡觉&#xff0c;横竖醒不来 &#x1f3c5;你可以不屠龙&#xff0c;但不能不磨剑&#x1f5e1; 目录 一、前言二、UI画面三、显示于场景四、结语 一、前言 由于标题限制&#xff0c;这篇文章主要是讲在unity中调用摄…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-28批量规范化

28批量规范化 """可持续加速深层网络的收敛速度""" import torch from torch import nn import liliPytorch as lp import matplotlib.pyplot as pltdef batch_norm(X, gamma, beta, moving_mean, moving_var, eps, momentum):""&quo…

ultralytics官方更新 | 添加YOLOv10到ultralytics

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、…

【idea-jdk1.8】使用Spring Initializr 创建 Spring Boot项目没有JDK8

信息差真可怕&#xff01; 很久没创建springboot项目&#xff0c;今天使用idea的Spring Initializr 创建 Spring Boot项目时&#xff0c;发现java版本里&#xff0c;无法选择jdk1.8&#xff0c;只有17、21、22&#xff1b;前段时间也听说过&#xff0c;springboot将放弃java8&a…

【深度学习驱动流体力学】计算流体力学openfoam-paraview与python3交互

目的1:配置 ParaView 中的 Python Shell 和 Python 交互环境 ParaView 提供了强大的 Python 接口,允许用户通过 Python 脚本来控制和操作其可视化功能。在 ParaView 中,可以通过 View > Python Shell 菜单打开 Python Shell 窗口,用于执行 Python 代码。要确保正确配置 …

GitLab配置免密登录之后仍然需要Git登录的解决办法

GitLab配置免密登录之后仍然需要Git登录的解决办法 因为实习工作需要&#xff0c;要在本地拉取gitlab上的代码&#xff0c;设置了密钥之后连接的时候还需要登录的token&#xff0c;摸索之后有了下面的解决办法。 方法一&#xff1a; 根据报错的提示&#xff0c;去网站上设置个人…

加速鸿蒙生态共建,蚂蚁mPaaS助力鸿蒙原生应用开发创新

6月21日-23日&#xff0c;2024华为开发者大会&#xff08;HDC 2024&#xff09;如期举行。在22日的【鸿蒙生态伙伴SDK】分论坛中&#xff0c;正式发布了【鸿蒙生态伙伴SDK市场】&#xff0c;其中蚂蚁数科旗下移动开发平台mPaaS&#xff08;以下简称&#xff1a;蚂蚁mPaaS&#…

How to use ModelSim

How to use ModelSim These are all written by a robot Remember, you can only simulate tb files.

SD卡无法读取?原因分析与数据恢复策略

一、SD卡无法读取的困境 SD卡作为便携式的存储介质&#xff0c;广泛应用于手机、相机、平板等多种电子设备中。然而&#xff0c;在使用过程中&#xff0c;我们可能会遭遇SD卡无法读取的困扰。当我们将SD卡插入设备时&#xff0c;设备无法识别SD卡&#xff0c;或者虽然识别了SD…

学习使用js和jquery修改css路径,实现html页面主题切换功能

学习使用js和jquery修改css路径&#xff0c;实现html页面主题切换功能 效果图html代码jquery切换css关键代码js切换css关键代码 效果图 html代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>修改css路径</title&g…

通俗解释resultType和resultMap的区别

【 1 对于单表而言&#xff1a; 注&#xff1a;以下都是摘抄过来的&#xff0c;做了让自己更能理解的版本 如果数据库返回结果的列名和要封装的实体的属性名完全一致的话用 resultType 属性 如果数据库返回结果的列名&#xff08;起了别名&#xff09;和要封装的实体的属性名…

PHP题目

一.编写函数change($str)实现字符串转换功能&#xff0c;例如“str_replace”转换成“str%replace”、“arr_var”转换成“arr%var”。 <?php function change($str){$astr_replace(_,%,$str);return $a; } echo change(str_replace); ?> 运行结果&#xff1a; 二.通…

spring-依赖注入DI

Setter注入&#xff1a; 1、引用类型&#xff1a;在bean中定义引用类型属性并提供可访问的set方法&#xff0c;配置中使用property标签ref属性注入引用类型对象&#xff1b; 2、简单类型&#xff1a;在bean中定义引用类型属性并提供可访问的set方法&#xff0c;在配置中使用pr…