Python中與模擬較相關的魔術方法

2021-10-08 00:26:02 字數 2805 閱讀 3694

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 新增...