これは少し初心者の質問だと思いますが、メソッドだけでなく、モジュールで定義されたクラスのクラスメソッドを使用している状況が提示されたときに使用する、より Pythonic なアプローチについて疑問に思っていますモジュール自体の中で定義されています。例として numpy を使用します。
import numpy as np
foo = np.matrix([[3, 4], [9, 12]])
# Get norm (without using linalg)
norm = np.sqrt(foo.dot(foo.T)).diagonal()
このように、foo のメソッドと numpy で定義されたメソッドを呼び出す混合ケースを使用するか、次のようにコードを記述できます。
norm = np.diagonal(np.sqrt(np.dot(foo, foo.T)))
私自身は foo.bar.baz.shoop.doop 構文を使用したいと思いますが、sqrt は foo のメソッドではないため、この場合はできません。では、このような行を書くより Pythonic な方法は何でしょうか?
ちなみに、補足質問として、モジュールで定義されたメソッドと比較して、クラスメソッドは通常より最適化されていますか? 内部で何が起こっているのかよくわかりませんが、numpy には arg が配列または行列になる一般的なケース用に記述された np.dot メソッドがあると仮定しました (再び numpy を例として使用)。 np.matrix.dot は再実装され、マトリックス操作のみに最適化されています。これで間違っている場合は修正してください。