07-4 | 魔术方法进阶

逸兴
逸兴
逸兴
57
文章
25
评论
2020-05-2318:13:13
评论
838字阅读2分47秒

bool

07-4 | 魔术方法进阶

如果没有定义 __bool__() , 实例的布尔值 等效为True

关于内建容器布尔值与长度的关系

07-4 | 魔术方法进阶

内建的容器类型的元素,如果长度为 None 则等效为 False

运算符重载-重要?

07-4 | 魔术方法进阶

比较运算的实现

类的实例本身是不可以进行比较的,通过重载运算符可以实现数学运算,其实就是通过魔术方法,类似上面的 __len__, 如下:

# encoding = utf-8


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __eq__(self, other):    # 实现等于比较
        return self.age == other.age    # 比较age

    def __lt__(self, other):    # 实现小于比较
        return self.age < other.age

    def __le__(self, other):    # 实现小于等于比较
        return self.age <= other.age

    def __str__(self):      # 定义实例的表示
        return "<Person: {},{}>".format(self.name, self.age)
    __repr__ = __str__

tom = Person('tom', 18)
jerry = Person('jerry', 21)

print(tom == jerry)     # 用的 __eq__,相当于 tom.__eq__(jerry)
print(tom < jerry)      # 用的 __lt__, 相当于 tom.__lt__(jerry)
print(tom <= jerry)     # 用的 __le__, 相当于 tom.__le__(jerry)
print(tom > jerry)      # 返过来也能做大于比较, 相当于 tom.__gt__(jerry)
print(sorted([jerry, tom]))     # 排序列表
07-4 | 魔术方法进阶

其实直接比较 实例的age属性也是可以的,使用实例直接比较加减看起来高级些,其他用途还没接触,也不清楚。

07-4 | 魔术方法进阶

加减运算的实现:

__sub__ 减法, __add__加法

上下文管理




https://www.hugbg.com/archives/2645.html
逸兴
  • 本文由 发表于 2020-05-2318:13:13
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
推导式、生成式与生成器 基础语法

推导式、生成式与生成器

推导式 概述 Python中的推导式是一种快速、简洁的数据结构创建方式,不需要手动创建数据结构中的每一个元素,类似于给出一个规律,python会根据这个规律自动填充数据结构。支持有列表推导式、字典推导...
Django DRF禁用URL末尾斜杆(:) 点点滴滴

Django DRF禁用URL末尾斜杆(:)

一、关于URL末尾斜杆 比如http://127.0.0.1:8000/api/v1/register 和 http://127.0.0.1:8000/api/v1/register/, 这两个是同一...
01-1 数据类型 基础语法

01-1 数据类型

第一章 数据类型 使用type() 函数可以查看数据类型 1.1 字符串 str 字符串是使用单引号或双引号括起来的任意文本。 比如'abc', '123'等 字符串类型 字符串类型用str表示 st...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: