zoukankan      html  css  js  c++  java
  • __repr__、__abs__、__bool__、__add__、__mul__

    # 本实例实现一个二维向量类
    
    from math import hypot
    
    
    class Vector:
    
        def __init__(self, x: int = 0, y: int = 0):
            self.x = x
            self.y = y
    
        def __repr__(self):
            """
            内置函数repr(),用于把一个对象用字符串的形式表达出来以便辨认.
            返回的字符串应该准确无歧义,并且尽可能表达出如何用代码构建出这个被打印的对象.
            :return: str
            """
            return "Vector(%r, %r)" % (self.x, self.y)
    
        def __abs__(self):
            return hypot(self.x, self.y)
    
        def __bool__(self):
            """
            为了判定一个值x为真还是为假,python会调用bool(x),这个函数只能返回True或False.
            默认情况下,我们自己定义的类的实例总被人为是真的.除非这个类对__bool__或__len__函数有自己的定义.
            bool(x)的背后是调用x.__bool__()的结果;如果不存在__bool__方法,那么bool(x)会尝试调用x.__len__(),
            若返回0,则则bool()会返回False,否则返回True
            :return: bool
            """
            # return bool(abs(self))
            return True if self.x or self.y else False
    
        def __add__(self, other):
            """
            实现加法 + , 中缀运算符的基本原则是不改变操作对象,而是产出一个新的值
            :param other: Vector
            :return: Vector
            """
            x = self.x + other.x
            y = self.y + other.y
            return Vector(x, y)
    
        def __mul__(self, other: int):
            """
            实现向量的标量乘法
            :param other: int
            :return: Vector
            """
            return Vector(self.x * other, self.y * other)
    
    
    if __name__ == '__main__':
        v1 = Vector(2, 4)
        v2 = Vector(1, 6)
        print(v1)
        print(v1 + v2)
        print(v1 * 3)
        print(abs(v1))
        print(bool(v1))
    
  • 相关阅读:
    架构师之路(4)详解面向对象 王泽宾 (转)
    输出螺旋矩阵(一)
    输出螺旋矩阵(三)
    excel sheet中数据的快速复制
    计算数组的维数
    不绑定记录集获取datagrid某行某列的内容
    API判断数组是否为空
    将某网页的某框架内容显示在WEBBROWSER中
    输出螺旋矩阵(二)
    快速删除一个包含文件和子文件夹的文件夹
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/13135438.html
Copyright © 2011-2022 走看看