【Python基础:面向对象之魔法方法】

简介: 【Python基础:面向对象之魔法方法】

一、魔法方法的概念


定义在类中的双下方法都可以称为魔法方法

不需要人为调用,在特定的条件下会自动触发,并运行

类似于__ init__, 当我在使用类产生对象时,会自动触发


二、常用魔法方法


1、__ init __


__init__(self):
    self: 调用者本身
  对象添加独有数据时,会自动触发

2、__ str __


__str__(self):
    self: 调用者本身
    对象被执行打印操作时会自动触发,该方法下必须使用return设置返回值,且返回值必须为字符串,否则报错


3、__ call __


__call__(self, *args, **kwargs):
    self: 调用者本身
    args:位置形参
    kwargs:关键字新参
    对象加括号调用时会自动触发


4、__ getattr __


__getattr__(self, item):
    self: 调用者本身
    item:调用者点的名字
    对象点不存在的名字时会自动触发该函数体代码,该方法形参内item为对象点出的名字,当同一类中同时出现__getattribute__方法时,系统默认使用__getattribute_


5、__ getattribute __


__getattribute__(self, item):
    self: 调用者本身
    item:调用者点的名字
  对象点名字时会自动触发该函数体代码,该方法形参内item为对象点出的名字,一旦该方法触发,就无法获取到对象点名字的值


6、__ setattr __


__setattr__(self, key, value):
    self: 调用者本身
    key:数据名字
    valuse:名字对应的数据值
  给对象添加/修改数据值的时候会自动触发,该方法形参内名字,分别对应对象点的名字和值


7、__ enter __


__enter__(self):
    self: 调用者本身
  当对象被当作with上下文管理操作的时候开始自动触发,该方法return返回什么,as后的变量名就会收到什么


8、__ exit __


__exit__(self, exc_type, exc_val, exc_tb):
    self: 调用者本身
  with上下文管理运行完毕之后会自动触发(子代码体结束)


三、魔法方法笔试题


第一题


条件:

补全下列代码,使运行不会报错

class Context:
    pass
with Context() as f:
    f.do_something()
'''
推导思维:
  1、类加括号产生对象
  2、当对象被with传入上下文管理使,就要用到__enter__方法
  3、__enter__方法返回值为f,使用该方法返回对象本身(self)
  4、对象加点的方式调用功能
  5、将该功能补全至类体代码中
  6、子代码结束后,调用__exit__关闭with
'''
class Context:
    def do_something(self):
        pass
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        pass
with Context() as f:
    f.do_something()


第二题


条件:

自定义字典类型并让字典能够通过句点符的方式操作键值对

'''
推导思维:
  1、使用类继承dict方法
  2、使用__setattr__方法,将键值对以索引赋值的方式传给self
  3、使用__getattr__的方法,当对象点名字时,使用return的方式将值传出
  4、上述两种方式分别可以实现以点的方式添加数值和取到数值
'''
  class MyDict(dict):
        def __setattr__(self, key, value):
            self[key] = value
        def __getattr__(self, item):
            return self.get(item)
        obj = MyDict()
        obj.name = 'jason'
        obj.pwd = 18
        obj.hobby = 'read'
        # print(obj)
        print(obj.name)
        print(obj.pwd)
        print(obj.hobby)
        # print(obj)
        # print(obj)  # 字典存储的数据  {}
        # print(obj.__dict__)  # 字典对象名称空间  {'name': 'jason'}
        print(type(obj))


相关文章
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
251 1
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
|
3月前
|
调度 Python
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
微电网两阶段鲁棒优化经济调度方法(Python代码实现)
|
3月前
|
传感器 大数据 API
Python数字限制在指定范围内:方法与实践
在Python编程中,限制数字范围是常见需求,如游戏属性控制、金融计算和数据过滤等场景。本文介绍了五种主流方法:基础条件判断、数学运算、装饰器模式、类封装及NumPy数组处理,分别适用于不同复杂度和性能要求的场景。每种方法均有示例代码和适用情况说明,帮助开发者根据实际需求选择最优方案。
148 0
|
3月前
|
Python
Python字符串center()方法详解 - 实现字符串居中对齐的完整指南
Python的`center()`方法用于将字符串居中,并通过指定宽度和填充字符美化输出格式,常用于文本对齐、标题及表格设计。
|
2月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
308 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
4月前
|
安全 Python
Python语言中常用的文件操作方法探讨
通过上述方法的结合使用,我们可以构筑出强大并且可靠的文件操作逻辑,切实解决日常编程中遇到的文件处理问题。
202 72
|
2月前
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
|
3月前
|
机器学习/深度学习 数据采集 算法
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
195 4
|
5月前
|
存储 机器学习/深度学习 人工智能
稀疏矩阵存储模型比较与在Python中的实现方法探讨
本文探讨了稀疏矩阵的压缩存储模型及其在Python中的实现方法,涵盖COO、CSR、CSC等常见格式。通过`scipy.sparse`等工具,分析了稀疏矩阵在高效运算中的应用,如矩阵乘法和图结构分析。文章还结合实际场景(推荐系统、自然语言处理等),提供了优化建议及性能评估,并展望了稀疏计算与AI硬件协同的未来趋势。掌握稀疏矩阵技术,可显著提升大规模数据处理效率,为工程实践带来重要价值。
219 58