簡潔にするために、私はPythonでPersonクラスを持っているとしましょう。このクラスには、firstname、lastname、およびdobの各フィールドがあります。Pythonicの比較関数
class Person:
def __init__(self, firstname, lastname, dob):
self.firstname = firstname;
self.lastname = lastname;
self.dob = dob;
ある種の状況では、姓でPersonのリストをソートし、続いてfirstnameの後にdobを並べ替えたい場合もあります。他の状況では、まずdobで、次にlastnameで、最後にfirstnameでソートする必要があります。そして、時には私はfirstnameで並べ替えることがあります。
最初の比較関数を作成するための単純な解決策は、このようなものになるだろう。ここで、すべてのメタプログラミングアプローチを使用して、これらのような比較関数を定義する簡単な方法があるはずのようにそれは思わ
def comparepeople(person1, person2):
if cmp(person1.lastname, person2.lastname) == 0:
if cmp(person1.firstname, person2.firstname) == 0:
return cmp(person1.dob, person2.dob);
return cmp(person1.firstname, person2.firstname);
return cmp(person1.lastname, person2.lastname);
私はこれらの非常に冗長で醜い比較方法を書くのではなく、優先順位の順にフィールド名を提供する必要があります。しかし、私は最近Pythonで遊んで始めて、私が何を記述しているのか分かりませんでした。
だから質問には、比較可能な構成メンバーが複数あるクラスの比較関数を書くのに最もPythonの方法はありますか?ここで
を比較メソッドを使用することはできません - それらのセミコロンを削除します!彼らは有用な目的を果たさず、良いPythonスタイルではありません。 –