考慮例如四元數學(https://en.wikipedia.org/wiki/Quaternion)。我可以創建一個將由非平凡語法創建的類嗎?
很顯然,我可以建立一個類,將通過
a = quaternion(1, 2, 3, 4)
print(a)
# 1 + 2i + 3j + 4k
定義一個新的四元數然而,通過使用
a = 1 + 2j
type(a)
# complex or <class 'complex'> depending if ipython or python
一個不能不注意到,本機
complex
數據類型可以在一個更漂亮的方式來定義
以某種方式捕獲1 + 2j
語法來創建內置類對象複合體(1,2)。
那麼,我可以這樣做嗎?有沒有辦法捕獲簡單的直接語法,如a = 1 + 2i + 3j + 4k
,並將其翻譯爲我的a = quartenion(1, 2, 3, 4)
,其方式與內置的complex
的工作方式類似?
「j」後綴是Python語言語法的一部分。所以 - 除非你想擴展核心Python,唯一實際的方法是讓你的'Quaternion'類接受一個字符串並適當地解析它......你可能會發現[sympy](http://docs.sympy.org/dev /index.html)在這裏使用。 –
@JonClements - 好點。但是如果我們用一個更安全的鍵取代j,python還沒有使用它呢? '1 + 2i + 3h + 4k'?我試圖理解是否原則上可能捕獲這樣的語法... – Aguy
不適用 - 因爲當Python根據其語法定義解析代碼時,它會引發'SyntaxError's。在不修改核心Python的情況下完成它的唯一方法是自己接收字符串並進行解析。 –