最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python如何讓類支持比較運(yùn)算

 更新時(shí)間:2018年03月20日 17:23:28   作者:北門吹雪  
這篇文章主要為大家詳細(xì)介紹了python如何讓類支持比較運(yùn)算,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python類支持比較運(yùn)算的具體代碼,供大家參考,具體內(nèi)容如下

案例:

  有時(shí)我們希望自定義的類,實(shí)例間可以使用比較運(yùn)算符進(jìn)行比較,我們自定義比較的行為。

  需求:

    有一個(gè)矩形的類,我們希望比較兩個(gè)矩形的實(shí)例時(shí),比較的是他們的面積

如何解決這個(gè)問題?

在類中重新定義比較運(yùn)算符,所有的比較運(yùn)算可以簡化為兩個(gè)基本的比較運(yùn)算,小于和等于比較

單個(gè)類比較

#!/usr/bin/python3
 
from math import pi
 
 
class Circle(object):
  def __init__(self, radius):
    self.radius = radius
 
  def get_area(self):
    return round(pow(self.radius, 2) * pi, 2)
 
  # 重定義小于比較
  def __lt__(self, other):
    return self.get_area() < other.get_area()
 
  # 重定義等于比較
  def __eq__(self, other):
    return self.get_area() == other.get_area()
 
if __name__ == '__main__':
  c1 = Circle(3.0)
  c2 = Circle(5.0)
 
  print(c1 < c2)   # c1.__le__(c2)
  print(c1 == c2)   # c1.__eq__(c2)  

兩個(gè)類比較

#!/usr/bin/python3
 
from math import pi
 
 
class Circle(object):
  def __init__(self, radius):
    self.radius = radius
 
  def get_area(self):
    return round(pow(self.radius, 2) * pi, 2)
 
  # 重定義小于比較
  def __lt__(self, other):
    return self.get_area() < other.get_area()
 
  # 重定義等于比較
  def __eq__(self, other):
    return self.get_area() == other.get_area()
 
if __name__ == '__main__':
  c1 = Circle(3.0)
  c2 = Circle(5.0)
 
  print(c1 < c2)   # c1.__le__(c2)
  print(c1 == c2)   # c1.__eq__(c2)
 
 
# !/usr/bin/python3
 
from math import pi
 
 
class Circle(object):
  def __init__(self, radius):
    self.radius = radius
 
  def get_area(self):
    return round(pow(self.radius, 2) * pi, 2)
 
  # 重定義小于比較
  def __lt__(self, other):
    return self.get_area() < other.get_area()
 
  # 重定義等于比較
  def __eq__(self, other):
    return self.get_area() == other.get_area()
 
 
class Rectangle(object):
  def __init__(self, width, height):
    self.width = width
    self.height = height
 
  def get_area(self):
    return self.width * self.height
 
  # 重定義小于比較
  def __lt__(self, other):
    return self.get_area() < other.get_area()
 
  # 重定義等于比較
  def __eq__(self, other):
    return self.get_area() == other.get_area()
 
 
if __name__ == '__main__':
  c1 = Circle(5.0)
  R1 = Rectangle(4.0, 5.0)
 
  print(c1 > R1) # c1.__le__(c2)
  print(c1 == R1) # c1.__eq__(c2) 

會出現(xiàn)一個(gè)問題,重復(fù)代碼,如何解決?

通過functools下類的裝飾器total_ordering進(jìn)行比較

# !/usr/bin/python3
 
from math import pi
from abc import abstractmethod
from functools import total_ordering
 
 
@total_ordering
class Shape(object):
  """
  定義一個(gè)抽象類,重定義比較運(yùn)算,再定義抽象方法,然后子類通過這個(gè)方法進(jìn)行比較,
  其他子類比較類都需要重構(gòu)抽象方法,實(shí)現(xiàn)比較運(yùn)算
  """
   
  # 標(biāo)記比較方法,抽象方法
  @abstractmethod
  def get_area(self):
    pass
   
  # 重定義小于比較
  def __lt__(self, other):
    return self.get_area() < other.get_area()
   
  # 重定義等于比較
  def __eq__(self, other):
    return self.get_area() == other.get_area()
 
 
class Circle(Shape):
  def __init__(self, radius):
    self.radius = radius
   
  def get_area(self):
    return round(pow(self.radius, 2) * pi, 2)
   
 
class Rectangle(Shape):
  def __init__(self, width, height):
    self.width = width
    self.height = height
   
  def get_area(self):
    return self.width * self.height
 
 
if __name__ == '__main__':
  c1 = Circle(5.0)
  R1 = Rectangle(4.0, 5.0)
   
  print(c1 > R1) # c1.__le__(c2)
  print(c1 == R1) # c1.__eq__(c2)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在Python中進(jìn)行自動化單元測試的教程

    在Python中進(jìn)行自動化單元測試的教程

    這篇文章主要介紹了在Python中進(jìn)行自動化單元測試的教程,本文來自于IBM官方文檔,需要的朋友可以參考下
    2015-04-04
  • Python實(shí)現(xiàn)釘釘訂閱消息功能

    Python實(shí)現(xiàn)釘釘訂閱消息功能

    這篇文章主要介紹了Python實(shí)現(xiàn)釘釘訂閱消息,本文通過實(shí)例代碼截圖的形式給大家展示的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python利用Matplotlib繪制圖表詳解

    Python利用Matplotlib繪制圖表詳解

    Matplotlib是Python中最受歡迎的數(shù)據(jù)可視化軟件包之一,支持跨平臺運(yùn)行,它是Python常用的 2D 繪圖庫。本文將介紹如何通過Matplotlib繪制常用的圖表
    2022-01-01
  • 最簡單的matplotlib安裝教程(小白)

    最簡單的matplotlib安裝教程(小白)

    這篇文章主要介紹了最簡單的matplotlib安裝教程(小白),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python 五子棋如何獲得鼠標(biāo)點(diǎn)擊坐標(biāo)

    python 五子棋如何獲得鼠標(biāo)點(diǎn)擊坐標(biāo)

    這篇文章主要介紹了python 五子棋如何獲得鼠標(biāo)點(diǎn)擊坐標(biāo),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python實(shí)現(xiàn)得到一個(gè)給定類的虛函數(shù)

    python實(shí)現(xiàn)得到一個(gè)給定類的虛函數(shù)

    這篇文章主要介紹了python實(shí)現(xiàn)得到一個(gè)給定類的虛函數(shù)的方法,以wx的PyPanel類為例講述了打印以base_開頭的方法的實(shí)例,需要的朋友可以參考下
    2014-09-09
  • 基于Python編寫一個(gè)B站全自動抽獎的小程序

    基于Python編寫一個(gè)B站全自動抽獎的小程序

    本文將利用Python編寫一個(gè)B站全自動抽獎的小程序,可以實(shí)時(shí)監(jiān)控自己關(guān)注的UP主,如果關(guān)注的UP主中有人發(fā)布了抽獎的動態(tài),就自動參與這個(gè)抽獎。這樣就能不錯(cuò)過任何一個(gè)可以暴富的機(jī)會了。需要的可以參考一下
    2022-03-03
  • python庫skimage給灰度圖像染色的方法示例

    python庫skimage給灰度圖像染色的方法示例

    這篇文章主要介紹了python庫skimage給灰度圖像染色的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python實(shí)現(xiàn)解析Html的方法與對比

    Python實(shí)現(xiàn)解析Html的方法與對比

    在最近需要的需求中,需要?python?獲取網(wǎng)頁內(nèi)容,并從html中獲取到想要的內(nèi)容,本文主要介紹了兩種常用方法并進(jìn)行了對比,感興趣的可以了解下
    2024-03-03
  • Python使用itcaht庫實(shí)現(xiàn)微信自動收發(fā)消息功能

    Python使用itcaht庫實(shí)現(xiàn)微信自動收發(fā)消息功能

    這篇文章主要介紹了Python使用itcaht庫實(shí)現(xiàn)微信自動收發(fā)消息功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評論

望谟县| 济源市| 甘洛县| 忻州市| 巴中市| 兴仁县| 天全县| 射洪县| 吉首市| 嘉禾县| 金川县| 渝北区| 清远市| 玉山县| 常州市| 伽师县| 自贡市| 长丰县| 兴城市| 天水市| 伊吾县| 崇阳县| 武邑县| 正安县| 松原市| 兰州市| 怀远县| 陇川县| 会同县| 房产| 许昌市| 安国市| 横山县| 龙门县| 台州市| 巴里| 新泰市| 彭水| 泸西县| 仙居县| 仙桃市|