• 如何理解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
  • 相关阅读:
    可视化学习:实现Canvas图片局部放大镜
    搜索算法(DFS和BFS 蓝桥杯 C++)
    【JVM】Java虚拟机
    C++的学习顺序
    linux设备模型:sysfs(kobject)解析
    若依前端vue设置子路径
    python学习-120-实现Fio结果自动化批量提取测试结果到CSV
    ArcGIS Maps SDK for JS:监听按钮点击事件控制图层的visible属性
    接口自动化框架
    springboot毕设项目一品萫茶馆管理系统的设计与实现69dcm(java+VUE+Mybatis+Maven+Mysql)
  • 原文地址:https://blog.csdn.net/nzbing/article/details/134457569