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

class VersionNum(object):
"""
版本号比较
默认版本以“.”分割,各位版本位数不超过3
例一:
235.458.95 由“.”分割版本,235、458、95都不能大于999
如果有版本要超过3位,需指定max_digit,但注意比较时,两个对比的max_digit必须相等!
例二:
if VersionNum('1.20.3') > VersionNum('1.9.3'): ...
"""
def __init__(self, version, delimiter='.', max_digit=3):
v_num = 0
v_list = version.split(delimiter)
for i, num in enumerate(v_list[-1::-1]):
if len(num) > max_digit:
raise ValueError('version can not greater than max_digit')
v_num += int(num) * (10 ** (i*max_digit))
self.max_digit = max_digit
self.data = v_num def __repr__(self):
"""
自我描述
"""
return "VersionNum(%d)" % self.data def __eq__(self, other):
self.check_max_digit(other)
return self.data == other.data def __ne__(self, other):
self.check_max_digit(other)
return self.data != other.data def __lt__(self, other):
self.check_max_digit(other)
return self.data < other.data def __le__(self, other):
self.check_max_digit(other)
return self.data <= other.data def __gt__(self, other):
self.check_max_digit(other)
return self.data > other.data def __ge__(self, other):
self.check_max_digit(other)
return self.data >= other.data def check_max_digit(self, other):
if self.max_digit != other.max_digit:
raise ValueError('The max_digit of the two versions of the comparison should be equal')

python 版本号比较 重载运算符的更多相关文章

  1. Python 正确重载运算符

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 有些事情让我不安,比如运算符重载.我决定不支持运算符重载,这完全是个人 ...

  2. python学习笔记之运算符

    目录 前言 软件环境 身份运算符 算术运算符 比较运算符 位移运算符 自变运算符 位运算符 逻辑运算符 成员关系运算符 Python真值表 最后 前言 在前面的博文介绍了Python的数据结构之后,接 ...

  3. Python基本语法_运算符详解

    目录 目录 前言 软件环境 身份运算符 算术运算符 比较运算符 位移运算符 自变运算符 位运算符 逻辑运算符 成员关系运算符 Python真值表 最后 前言 在前面的博文介绍了Python的数据结构之 ...

  4. c++的重载运算符

    c++中允许重载运算符: 这是我辛苦的结果 #include"iostream"using namespace std;class aaa{ int x;public: aaa() ...

  5. C# 重载运算符

    如果你想让自己定义的类型可以用运算符进行运算,那么可以通过重载运算符来实现: 示例: class Salary { public int RMB { get; set; } public static ...

  6. 【STL】重载运算符

    重载运算符 为什么要重载运算符: C++中预定义的运算符的操作对象只能是基本数据类型.但实际上,对于许多用户自定义类型(例如结构体),也需要类似的运算操作.这时就必须在C++中重新定义这些运算符,赋予 ...

  7. c++中有些重载运算符为什么要返回引用

    事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进 ...

  8. C++ Primer : : 第十四章 : 重载运算符与类型转换之类型转换运算符和重载匹配

    类型转换运算符 class SmallInt { public: SmallInt(int i = 0) : val(i) { if (i < 0 || i > 255) throw st ...

  9. C++ Primer : 第十四章 : 重载运算与类型转换之重载运算符

    重载前须知 重载运算符是特殊的函数,它们的名字由operator和其后要重载的运算符号共同组成. 因为重载运算符时函数, 因此它包含返回值.参数列表和函数体. 对于重载运算符是成员函数时, 它的第一个 ...

随机推荐

  1. Flutter中通过普通的点击事件修改TextFormField的值

    import 'package:flutter/material.dart'; import 'package:zhongfa_apps/widget/public/PublicWidget.dart ...

  2. [简短问答]LODOP打印不清晰

    用什么语句输出的:使用的的是什么语句输出的,是ADD_PRINT_TEXT纯文本,还是html的超文本. 超文本不清晰:如果用的是ADD_PRINT_HTML ,换成 ADD_PRINT_HTM试试, ...

  3. js:如何获取select选中的值

    我想获取select选中的value,或者text,或者…… 比如这个: <select id="select">    <option value=" ...

  4. UE4 window打包ios备忘

    1.生成SHH key 2.安装证书 *.cer,*.p12 以下转自:http://wangjie.rocks/2017/11/30/ue4-ios-build-on-windows/ 问题一 12 ...

  5. java打包小记

    1.一个类的 Hello.java class Hello{ public static void main(String[] agrs){ System.out.println("hell ...

  6. 在MAX10上使用DDR3 IP的一个关于DQS/DQSn pin的错误解决办法

    MAX10 是Intel FPGA的CPLD中的一个特殊的芯片,因为它内部有CPLD的Flash结构,也有FPGA的Ram结构.具体的可以参考MAX10 Handbook文档. Max10 在外部存储 ...

  7. jquery on绑定事件叠加解决方法

    jquery on绑定事件叠加解决方法 代码如下 <pre> $('.maoqiu').each(function () { var is_bind = $(this).attr('is_ ...

  8. 【转帖】从 Oracle 到 PostgreSQL ,某保险公司迁移实践 技术实践

    从 Oracle 到 PostgreSQL ,某保险公司迁移实践 http://www.itpub.net/2019/11/08/4108/ 信泰人寿保险股份有限公司 摘要:去O一直是金融保险行业永恒 ...

  9. C++Primer 5th Chap2 Variables and basic Types

    wchar_t,char16_t,char32_t用于拓展字符集 char和signed char并不一样,由编译器决定类型char表现上述两种中的哪一种 一般long的大小和int无二,如果超过in ...

  10. 使用flask做网页的excel成绩分析

    使用到的技术:pyecharts flask 首先 pip install flask 和下载pip install pyecharts==0.5.5 项目结构: 代码: from flask imp ...