码迷,mamicode.com
首页 > 其他好文 > 详细

__repr__、__abs__、__bool__、__add__、__mul__

时间:2020-06-15 19:20:33      阅读:42      评论:0      收藏:0      [点我收藏+]

标签:情况   形式   turn   定义   基本原则   字符   代码   name   改变   

# 本实例实现一个二维向量类

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))

__repr__、__abs__、__bool__、__add__、__mul__

标签:情况   形式   turn   定义   基本原则   字符   代码   name   改变   

原文地址:https://www.cnblogs.com/zyyhxbs/p/13135438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!