タイトルをより適切に表現する方法が見つかりませんでした。お気軽に修正してください。
私はPythonにかなり慣れていないので、現在言語を試しています.すべての組み込み型を他のメンバーで拡張できないことに気付きました..たとえば、型にeach
メソッドを追加したいのですが、それはlist
不可能であること。効率的な理由からそのように設計されており、組み込み型のほとんどは C で実装されていることを認識しています。
この動作をオーバーライドすることがわかった理由の 1 つは、新しいクラスを定義することです。このクラスは拡張されますlist
が、それ以外の場合は何もしません。次に、変数list
をその新しいクラスに割り当てることができます。新しいリストをインスタンス化するたびに、元の型list
を作成するために使用されるように、コンストラクターを使用します。list
class MyList(list):
def each(self, func):
for item in self:
func(item)
list = MyList
my_list = list((1,2,3,4))
my_list.each(lambda x: print(x))
出力:
1
2
3
4
もちろん、構築された it 型を取得し、その型を拡張するクラスを返すメソッドを定義することで、アイデアを一般化できます。さらに、元list
の変数を別の変数に保存して、アクセスを維持することもできます。
私が今直面している唯一の問題は、 alist
をそのリテラル形式 (つまり[1,2,3,4]
) でインスタンス化すると、元のリスト コンストラクターが引き続き使用されることです (または使用しますか?)。この動作を無効にする方法はありますか? 答えが「いいえ」の場合、ユーザーが組み込み型を拡張できるようにする他の方法を知っていますか? (javascript が組み込みのプロトタイプを拡張できるように)。
組み込みのこの制限 (メンバーを追加できない) が Python の欠点の 1 つであり、他のユーザー定義型と矛盾していると思います...全体的に、私はこの言語が大好きですが、なぜこれが起こるのか理解できません。制限は本当に必要です。