91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何讓類支持比較運算

發布時間:2020-08-31 06:03:02 來源:腳本之家 閱讀:139 作者:北門吹雪 欄目:開發技術

本文實例為大家分享了python類支持比較運算的具體代碼,供大家參考,具體內容如下

案例:

  有時我們希望自定義的類,實例間可以使用比較運算符進行比較,我們自定義比較的行為。

  需求:

    有一個矩形的類,我們希望比較兩個矩形的實例時,比較的是他們的面積

如何解決這個問題?

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

單個類比較

#!/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()
 
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) 

會出現一個問題,重復代碼,如何解決?

通過functools下類的裝飾器total_ordering進行比較

# !/usr/bin/python3
 
from math import pi
from abc import abstractmethod
from functools import total_ordering
 
 
@total_ordering
class Shape(object):
  """
  定義一個抽象類,重定義比較運算,再定義抽象方法,然后子類通過這個方法進行比較,
  其他子類比較類都需要重構抽象方法,實現比較運算
  """
   
  # 標記比較方法,抽象方法
  @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)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东宁县| 精河县| 色达县| 乐至县| 青海省| 萝北县| 石阡县| 栾川县| 信丰县| 宜兰市| 岱山县| 清远市| 乌审旗| 陈巴尔虎旗| 泌阳县| 宁陵县| 绥阳县| 贡山| 舒兰市| 资源县| 德令哈市| 甘谷县| 任丘市| 交城县| 同江市| 疏附县| 花垣县| 监利县| 全椒县| 宜兰市| 德兴市| 教育| 张家界市| 平顺县| 新余市| 乐都县| 牡丹江市| 阿克陶县| 宁都县| 东阿县| 平塘县|