码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何理解Python中一切皆对象?


    Python

      • 一、示例代码
      • 二、Python中的魔法方法

    一、示例代码

    • 有理数类
    import math
    
    class rational:
        def __init__(self,p,q):
            self.p = p
            self.q = q
    
        def __str__(self):
            return "{} / {}".format(self.p,self.q)
    
        def simplify(self):
            gcd = math.gcd(self.p,self.q)
            return rational(int(self.p / gcd),int(self.q / gcd))
    
        #加
        def __add__(self, other):
            return rational(self.p + other.p,self.q + other.q)
            
        #减
        def __sub__(self, other):
            return rational(self.p * other.q - other.p * self.q,self.q * other.q)
            
        #乘
        def __mul__(self, other):
            return rational(self.p * other.p,self.q * other.q)
            
        #除
        def __div__(self, other):
            return rational(self.p * other.q,self.q * other.p)
            
        #相等
        def __eq__(self, other):
            fz = self.simplify()
            fm = other.simplify()
            return fz.p == fm.p and fz.q == fm.q
    
        def __float__(self):
            return float(self.p / self.q)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    Python中一切皆对象,如常见的加(+)、减(-)、乘(*)、除(/)、相等(==)都是调用类中的某个方法
    eg:

    self:指的是调用该函数的对象,指代的是对象本身,和Java中的this相同
    r = rational(1,2)
    r1 = rational(1,4)
    r + r1表示r对象调用+方法,也就是__add__方法,传入r1对象作为参数,可以理解为
    r.+(r1)
    同理减、乘、除都是
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、Python中的魔法方法

    __xx __()的函数叫做魔法方法,指的是具有特殊功能的函数
    1、__init __()

    • 构造方法,在实例化对象时默认被调用,不需要手动调用

    2、__str __()

    • 当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str
      __方法,那么就会打印从在这个方法中return的数据,相当于Java中重写toString()方法

    3、__repr __()

    • 和__str __作用一样,也是返回对象的字符串表示,区别是__str __目的是为了提供可读性好的输出,__repr __返回更官方一些,为了提供准确且详细的输出

    eg:

    class Point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def __str__(self):
            return f'Point({self.x}, {self.y})'
    
        def __repr__(self):
            return f'Point(x={self.x}, y={self.y})'
    
    point = Point(2, 3)
    
    print(str(point))  # 输出: Point(2, 3)
    print(repr(point))  # 输出: Point(x=2, y=3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4、__del __()
    当删除对象时,python解释器也会默认调用__del __()方法

    del 对象
    
    • 1
  • 相关阅读:
    【学习笔记】CF1456E XOR-ranges
    如何在小红书上推广民宿?看旅游类如何玩转小红书
    试题:最大的矩形(给定直方图里面积最大的矩形)
    C++、操作系统、计算机网络等需要巩固的知识点(自用,更新中)
    2024三掌柜赠书活动第十六期:AI时代Python金融大数据分析实战
    iOS关于搜索不规则瀑布流布局的实现小结
    css面试题及答案 【集合目录】
    武汉新时标文化传媒抖音小店官网功能大揭秘
    机器学习AI大模型的开源与闭源:哪个更好?
    全新升级的AOP框架Dora.Interception[5]: 实现任意的拦截器注册方式
  • 原文地址:https://blog.csdn.net/nzbing/article/details/134457569
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号