21

python-modules、Django、Zope、またはPythonのどこでもjava.net.URLのようなものを探しています。関係するプログラムの分析結果は、UR​​Lがその中で重要な役割を果たしていることを示唆しているので、セマンティクスの理由からそれが望ましいです。その結果、そのようなURLクラスもそのプログラムで非常に実用的になります。

もちろん、自分でそのようなクラスを書くこともできますが、車輪の再発明を始める前に、周りを見回したいと思います。

私はurllib2urlparseを見ました。基本的に私が必要とする機能を持っていますが、それをのurlparseようなクラスにカプセル化することはありませんjava.net.URL。私のプログラムの分析に関しては、逆さまに機能します。

urlparseクラスSplitResultとのソースコードも調べましたParseResult。それらにはいくつかの基本的な機能があり、サブクラス化に使用できます。ただし、残りのurlparse関数をサブクラスメソッドとして書き直す必要があります。

mxURL-Python用の柔軟なURLデータ型も見つかりました。それは私が本当に欲しいものに非常に近いです。それだけが私の目的にはかなりやり過ぎのようです。

誰かが別のオプションを提案できますか?車輪の再発明を続行する必要がありますか?

私の解決策:

URLクラスを取得するために、基本的に2つのことを行いました。

  1. から継承しurlparse.ResultMixinます。
  2. urlparse.urlparse()結果を呼び出してURLインスタンスのパラメータに変換するだけの関数を定義します。
4

4 に答える 4

18

urlparse URLをと呼ばれるクラスにカプセル化するParseResultので、これらのファクトリ関数と見なすことができますPythonドキュメントから直接:

>>> urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
            params='', query='', fragment='')

URLをカプセル化するために呼び出されるクラスがどうしても必要な場合URLは、エイリアス(URL = urlparse.ParseResult)を使用するか、アダプタを作成します。

于 2011-05-29T21:02:06.133 に答える
5

それはあなたのニーズへの答えかもしれないので、あなたはfurlを見ることを検討したいかもしれません。

于 2012-08-14T09:22:44.830 に答える
3

2018年現在の状況:

現在維持されているのはfurlだけですが、その主な欠点は、変更可能であり、もちろんベストプラクティスを奨励しないことです。pathlib(不変のクラスで構成される優れた最新のリファレンスがあります。)

全体として、URLを解析して構築するための苦痛のないOOの方法を持つことは素晴らしいことです。

アップデート

yarlは一見の価値があります。

于 2018-01-16T18:20:32.177 に答える
2

ここでのパーティーには約10年遅れていますが、今日、pydanticは、URLの検証、保存、および受け渡しに役立つ可能性のあるいくつかのURLタイプを提供しています。タイプのヒントがあり、mypy最近ますます普及しているので、これをある種の標準と考える人もいるかもしれません。

于 2021-09-20T07:32:26.847 に答える