• 双下方法的简单实例


    0 Vector2d实例的分量可以直接通过属性访问(无需调用读值方法)
    2 Vector2d实例可以拆包成变量元组
    3repr函数调用 Vector2d实例,得到的结果类似于构建实例的源码。Vector2d(3.0,4.0)
    4这里使用eval函数,表明repr函数调用 Vector.2d实例得到的是对构造方法的准确表述。
    5实例支持使用=比较;这样便于测试。
    6 print函数会调用str函数,对 Vector2d来说,输出的是一个有序对
    7bytes函数会调用 bytes_方法,生成实例的二进制表示形式。
    8abs函数会调用_abs_方法,返回 Vector2d实例的模。
    9bool函数会调用bool_方法,如果 Vector2d实例的模为零,返回 False,否则返回True
    
    
    from array import array
    import math
    
    
    class Vector2d:
        typecode = 'd'
    
        def __init__(self, x, y):
            '''类外直接拿到属性'''
            self.x = float(x)
            self.y = float(y)
    
        def __iter__(self):
            '''返回可迭代的对象'''
            return (i for i in (self.x, self.y))
    
        def __str__(self):
            return str(tuple(self))
    
        def __repr__(self):
            '''*的作用,拆包'''
            class_name = type(self).__name__
            return '{}({!r},{!r})'.format(class_name, *self)
    
        def __eq__(self, other):
            return tuple(self) == tuple(other)
    
        def __bytes__(self):
            return (bytes([ord(self.typecode)]) + bytes(array(self.typecode, self)))
    
        def __abs__(self):
            '''欧几里得范式sqrt(x*x + y*y)。'''
            return math.hypot(self.x, self.y)
    
        def __bool__(self):
            return bool(abs(self))
    
    
    v1 = Vector2d(3.0, 4.0)
    print(v1.x, v1.y)
    # 可拆包
    x, y = v1
    print(x, y)
    
    print(v1)  # 只是调用打印或显示的时候调用str方法
    print(repr(v1))
    v1_clone = eval(repr(v1))  # (3.0, 4.0)
    
    print(v1 == v1_clone)  # True
    
    print(bytes(v1))
    
    print(abs(v1))
    
    print(bool(v1))

    123

  • 相关阅读:
    OllyUni.dll
    系统修改利器XueTr
    dubbo+zipkin调用链监控(二)
    Kafka Manager
    简易RPC框架-SPI
    Spring Cache扩展:注解失效时间+主动刷新缓存(二)
    从头开始搭建一个Spring boot+ActiveMQ高可用分布式环境
    简易RPC框架-熔断降级机制
    简易RPC框架-代理
    转:一篇讲线上优化查 CPU的脚本
  • 原文地址:https://www.cnblogs.com/liuer-mihou/p/11887937.html
Copyright © 2020-2023  润新知