zoukankan      html  css  js  c++  java
  • Type-base dispatch

    In the previous section we added two Time objects, but you also might want to add an integer to a Time object. The following is an alternative version of __add__ that checks the type of other and invokes either add_time or increment:

    def __add__(self,other):
            if (isinstance(other,Time)):
                return self.increment(other)
            else:
                return Time.int_to_time(self.time_to_int() + other)

    The built-in function isinstance takes a value and a class object, and returns True if the value is an instance of the class. If other is a Time object, __add__ invokes add_time. Otherwise it assumes that the seconds parameter is a number and invokes increment. This operation is called a type-based dispatch because it dispatches because it dispatches the computation to different methods based on the type of the arguments.

    Unfortunately, this implementation of addition is not commutative. If the integer is the first operand. The problem is, instead of asking the Time object to add an integer, Python is asking an integer to add a Time object, and it doesn’t know how to do that. But there is a clever solution for this problem, the radd method, which stands for ‘right-side add’. This method is invoked when a Time object appears on the right side of the + operator.

    def __radd__(self,other):
            return self.__add__(other)

    from Thinking in Python

  • 相关阅读:
    set集合
    字典的使用与操作
    列表和字符串
    bzoj 4927: 第一题
    bzoj 3031: 理科男
    bzoj2263: Pku3889 Fractal Streets
    bzoj 1288: Neighbours
    bzoj2026: [SHOI2009]Coin
    bzoj3326: [Scoi2013]数数
    bzoj1494: [NOI2007]生成树计数
  • 原文地址:https://www.cnblogs.com/ryansunyu/p/4004519.html
Copyright © 2011-2022 走看看