zoukankan      html  css  js  c++  java
  • 双下方法的简单实例

    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

  • 相关阅读:
    [codevs 1227] 方格取数 2
    记冬令营
    Codeforces Round 558(Div 2)题解
    Educational Round 64 题解
    [GXOI/GZOI2019]与或和(位运算,单调栈)
    LOJ6053 简单的函数(min_25筛)
    LOJ6235 区间素数个数(min_25筛)
    min_25筛学习笔记
    CF1142C U2(计算几何,凸包)
    关于一些没做出来的SBCF题
  • 原文地址:https://www.cnblogs.com/liuer-mihou/p/11887937.html
Copyright © 2011-2022 走看看