python创建的类有哪些类似于__add__()的特殊方法

可以从官网上找到:
http://docs.python.org/3/reference/datamodel.html#specialnames
下面列一些常用的:
用一个实例来介绍:

"""
File: student.py
Resources to manage a student's name and test scores.
"""


class Student(object):
    """represents a student"""
    count = 0  

    def __init__(self, name, number):
        """Constructor creates a Student
        with the given name and number of scores and sets all scores to 0."""
        Student.count += 1
        self.name = name
        self.scores = []
        for count in range(number):
            self.scores.append(0)

    def __eq__(self, other):
        if self is other:
            return True
        if type(self) != type(other):
            return False
        return self.name == other.name and self.scores == other.scores

    def __str__(self):
        """Returns the string representation of the student"""
        return 'Name:' + self.name + '\nScores:' + \
               ' '.join(map(str, self.scores))

	def __add__(self, other):
        if isinstance(other, Point):
            self.count += other.count
            return self.__str__()
        else:
            self.count += other
            return self.__str__()

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

	def __gt__(self, other):
        if self.count > other:
            return True
        return False
     
    def __call__(self):
    	print("Now what you saw was exactly the function of __call__()")

__eq__()实现的是运算符号==的功能,
比较的步骤是这样的:设有两个对象a, b
首先看两个对象的引用是否相等,如果相等,则a == b为True;不相等继续下一步骤:
看看两个对象是否是同一类型,即type(a) == type(b), 如果不是,则a==b为False;不相等继续下一步骤;
看看两个对象的值是否相等,即a.value==b.value,如果是,则a==b为True;不等就是False。

__str__()实现的是print(a),它决定了你调用print()函数的时候会输出什么,
但是要注意的是,这个函数只能返回字符串,不能是其他的内容。

__add__()实现的是a + b,通过更改它的内容,你可以实现print(a, 12)和print(a, b)的功能。

__radd__()实现的是补充__add__(),比如我要实现print(12 + a),也就是12 位于左边,__radd__()的用法见上方代码。

__sub__()实现的是a - b,__rsub__()实现的是补充__sub__(),和add类似。

同样,mul/rmul -> 乘法; div/rdiv -> 除法;

__gt__()实现的是a > b;__lt__()实现的是a < b

__repr__()的作用和__str__()相似,可以通用不用搞那么细,
如果想弄懂它们之前的区别,可以查看这篇博客:

https://blog.csdn.net/weixin_42615068/article/details/89093671

__call__()实现的是:a(),(a是一个Student实例)
直接将类变量加上括号运行默认为执行类中的__call__函数
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值