class square(object):
"""比較長方形的面積大小
"""def __init__(self,width,height):
self.width = width
self.height = height
def res_area(self):
return self.width * self.height
def __eq__(self, other): # ==
return self.res_area()=
= other.res_area(
) def __ne__(self, other): # !=
return self.res_area()=
= other.res_area(
) def __gt__(self, other):# >
return self.res_area(
)> other.res_area(
) def __lt__(self, other):# <
return self.res_area(
)< other.res_area(
) def __ge__(self, other):# >=
return self.res_area(
)>= other.res_area(
) def __le__(self, other):# <=
return self.res_area(
)<= other.res_area(
)s1 = square(2,
3) s2 = square(4,
5)print
(s1>=s2)
# 執行__ge__方法
__eq__(self, other) 定義相等符號 ==
__ne__(self,other) 定義不等符號 !=
__lt__(self,other) 定義小於符號 <
__gt__(self,other) 定義大於符號 >
__le__(self,other) 定義小於等於符號 <=
__ge__(self,other) 定義大於等於符號 >=
其中==和!=,>和< ,>=和<=都是對應的,也就是我們只需要實現其中的乙個方法就可以使用另外的乙個方法。例如我們實現了__eq__來定義==,即使不實現__ne__方法一可以進行!=的操作。即使是這樣也比較麻煩,為此python中提供了@total_ordering裝飾器。這樣我們只需要實現》,<,>=,<=這個4個中的某乙個方法,並可以進行所有的比較操作。如下
from functools import total_ordering
@total_ordering
class square(object):
def __init__(self,width,height):
self.width = width
self.height = height
def res_area(self):
return self.width * self.height
def __gt__(self, other):# 只實現了__gt__方法就可以進行所有的比較操作
return self.res_area(
)> other.res_area(
)s1 = square(2,
3)s2 = square(4,
5)print
(s1>s2)
# false
print
(s1# true
print
(s1>=s2)
# false
print
(s1<=s2)
# true
print
(s1!=s2)
# true
print
(s1=
=s2)
# false
通過上面乙個例子我們可以比較不同長方形的面積,那麼如果我們現在想比較長方形和圓形的面積。這時就想到了之前學的抽象基類
import abc
import math
from functools import total_ordering
@total_ordering
class area(metaclass=abc.abcmeta):
@abc.abstractmethod
def res_area(self):
pass
def __gt__(self, other):
return self.res_area(
)>other.res_area(
)class cricle(area):
def __init__(self,r):
self.r = r
def res_area(self):
return self.r**2
*math.pi
class square(area):
def __init__(self,width,height):
self.width = width
self.height = height
def res_area(self):
return self.width * self.height
s = square(2,
3)c = cricle(1)
print
(s<=c)
# false
模擬實現與字串相關的函式(較全)
模擬實現strcpy,會將 0一起拷貝 char my strcpy char dest,char str dest str return start int main 模擬實現strcat,追加字串會帶上 0 char my strcat char dest,char str int main 模...
python中 python中的 與
這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...
第4 3節 Python中與迭代相關的函式
下面要介紹的enumerate range zip reversed sorted屬於python內建的函式或者類別,返回的物件都可通過迭代方法訪問。一 enumerate函式 1.語法 enumerate iterable,start 0 1 該函式python 2.3.以上版本可用,2.6 新增...