たとえば、クォータニオン数学(https://en.wikipedia.org/wiki/Quaternion)を考えてみましょう。わかりやすい構文で作成されるクラスを作成できますか?
もちろん、私はしかし、1がネイティブcomplex
データ型は
a = 1 + 2j
type(a)
# complex or <class 'complex'> depending if ipython or python
を使用することによって非常に良く方法で定義することができることを気付いて助けることができない
a = quaternion(1, 2, 3, 4)
print(a)
# 1 + 2i + 3j + 4k
によって新しい四元数を定義するクラスを構築することができます
1 + 2j
の構文は何とかキャプチャされ、組み込みクラスオブジェクト複合体(1,2)が作成されます。
私は同じことをすることはできますか? a = 1 + 2i + 3j + 4k
のような簡単な直接構文を捕捉し、complex
の仕組みと同じように私のa = quartenion(1, 2, 3, 4)
に変換する方法はありますか?
'j'接尾辞は、Pythonの言語構文の一部です。だから、あなたがコアPythonを拡張する気がない限り、実用的な唯一の方法は、あなたの 'Quaternion'クラスに文字列を受け入れ、それを適切に解析することです。[sympy](http://docs.sympy.org/dev /index.html)をここで使用します。 –
@JonClements - 良い点。しかし、jを安全な鍵で置き換えると、まだPythonで使用されていない場合はどうなりますか? '1 + 2i + 3h + 4k'?私はこのような構文を取り込むことが原則可能かどうかを理解しようとしています... – Aguy
いいえ - Pythonがその構文定義に従ってコードを解析すると、 'SyntaxError'sが発生するためです。コアのPythonを変更せずにこれを行う唯一の方法は、文字列を取り、それを自分で解析することです。 –