【复试 python程序设计 第2版 董付国】python特殊方法与运算符重载

1. 实例方法

1.1 __add__(self, n)

# -*- coding: utf-8 -*-

# 数组类,支持数组与数字之间的四则运算
# 数组之间的 加法运算,内积运算和大小比较
# 数组元素访问和修改 
# 成员测试
class MyArray:
    __value = []
    __size = 0
    
    # 判断是否是数字
    def __IsNumber(self, n):
        if (not isinstance(n, int)) and \
           (not isinstance(n, float)) and \
           (not isinstance(n, complex)):
               return False
        else:
            return True
          
    # 初始化
    def __init__(self, *args):
        if not args:
            self.__value = []
        else:
            for arg in args:
                if not self.__IsNumber(arg):
                    print('All elements must be numbers')
                    return
            self.__value = list(args)
        
    # 数组中每个元素都与数字n相加,或两个数组相加
    def __add__(self, n):
        if self.__IsNumber(n):
            b = MyArray()
            for v in self.__value:
                b.__value.append(v + n)
            return b
        elif isinstance(n, MyArray):
            if len(n.__value) == len(self.__value):
                c = MyArray()
                for i, j in zip(self.__value, n.__value):
                    c.__value.append(i + j)
                return c
            else:
                print('Length not equal')
        else:
            print('Not supported')

1.2 __sub__

    def __sub__(self, n):
        if not self.__IsNumber(n):
            print("not number")
            return
        b = MyArray()
        for v in self.__value:
            b.__value.append(v - n)
        return b

1.3 __repr__:可直接输出对象[区别__str__)

 如果没有写这个函数:

    # 直接使用对象作为语句时调用该函数
    def __repr__(self):
        return repr(self.__value)

1.4 __str__:可直接输出对象

def __str__(self):
return str(self.__value)

猜你喜欢

转载自www.cnblogs.com/douzujun/p/12535830.html
今日推荐