2016-08-14 29 views
0

最近我正在閱讀關於Python中的魔術方法,這使得代碼更容易閱讀。我們可以定義我們自己的映射嗎?如果是這樣,是否有任何指示,這是多麼複雜?例如,+總是映射到__add__。我可以爲?定義一個映射嗎?在我的課堂上,這將會調用__is_valid__添加我們自己的魔術方法映射

c = Car() 
print(c?) # invokes __is_valid__ of Car to get the result 
+0

你真的試圖改變python語法。問號沒有特別的意義。要做到這一點,你必須改變python的語法分析器,語法分析(例如定義優先級),這只是語法糖的工作。爲什麼不使用標準方式:print(c.is_valid())?創建一個新的運營商不會擺脫你實施這種方法的責任。 c.is_valid可以立即讀取每個人,c?是新鮮事物。 – lofcek

+0

或者只是實現一個'@屬性'並使用'c.valid'。 – jonrsharpe

+0

@jonrsharpe:我不認爲這真的是另一個問題的重複。這個問題是關於添加語句的問題,並且答案是字節碼生成和東西。這個問題是關於創建新的運算符並將它們映射到魔術方法的問題,這是語法變化的一種更爲有限的形式。 (如果在某處有真正的副本,我不會感到驚訝。) – BrenBarn

回答

0

您似乎在問是否可以在Python中創建自己的語法,添加通過魔術方法實現的新符號。答案是不。唯一可用的運營商是已有的運營商(+,*等),並且每個運營商都有其相應的魔術方法。你不能添加新的。

+0

嗯..合理。所以這意味着我不能改變綁定。含義+將始終調用'__add__',而不是任何其他自定義定義的方法'__some_impl__'。是對的嗎 ? – worldofprasanna

+0

@worldofprasanna:對。 (我的意思是,它可能也會調用'__radd__'或其他在某些情況下被定義爲要調用的函數,但是每個運算符調用什麼魔術方法的規則都是固定的,您無法更改它們。) – BrenBarn