私は趣味で Python を独学しているプログラマーです。curses モジュールは Windows では動作しないため、クロスプラットフォームの Curses 実装である UniCurses を調べています。UniCurses の関数が、私が愛するようになった Python スタイルとほとんど似ていないことを知ってがっかりしました。これは、おそらくレガシー サポートと歴史的な理由によるものです。たとえば、ターミナル内の「ウィンドウ」にテキストを追加するには、waddstr(WINDOW, str, [attr])
またはを呼び出しますmvwaddstr(WINDOW, y, x, str, [attr])
。ウィンドウをパラメーターとして渡す必要があり、ウィンドウをメソッドやインスタンス変数などを持つオブジェクトとして扱わない、これらの暗号化された名前の関数が多数あります。
window_instance.add_string(string, [attr])
理想的には、オプションの x および y パラメータをメソッドに提供mvwaddstr()
して、 と同じメソッド定義に組み込みますwaddstr()
。
頭に浮かぶこれを実装する手段は、次のようにウィンドウ構造のクラスを定義することです。
import unicurses
# this would normally be 'from unicurses import * ' but I'm trying to being explicit here
...
class PseudoWindow(object):
def __init__(self, num_cols,num_lines, begin_x, begin_y):
self.id = unicurses.newwin(nlines, ncols, begin_y, begin_x)
# use this value in unicurses functions
def __del__(self):
unicurses.delwin(self.id)
def add_string(self, string, [attr], x = None, y = None)
if x is None and y is None:
unicurses.waddstr(self.id, string, [attr])
else:
unicurses.mvwaddstr(self.id, string, y, x, [attr])
# wrap further unicurses functions into methods of PseudoWindow as required
経験の浅いプログラマーにとって、ある言語から別の言語に切り替えることの精神的コストはやや高く、これらの関数をより使い慣れた構文でラップすることは、生活の質に大きな利点があるように思われます. UniCurses がどのように使用されることになっているのかについて、何かが欠けていますか? このように API をさらに抽象化したレイヤーでラップすることの欠点と落とし穴は何ですか? 標準のオブジェクト指向 Python 構文を引き続き使用できるこのアプローチの代替手段はありますか?