@decezeはおそらく彼のコメントに答えがあります。これらの関数オブジェクトのいくつかは実際にリストに格納されており、リストのいくつかの要素は「適切な」オブジェクトのインスタンスである場合があります。他の場所
class F1:
def __init__(self, a):
self.max=a
def ok(self, x):
return x < self.max
class F2:
@staticmethod
def ok(x):
return x > 0
個人的に
checkers = []
...
checkers.append(F1(i+j))
checkers.append(F2 )
....
if (all(check.ok(x) for check in checkers)
私は@staticmethod
に煩わさだけダミーdef __init__(self): pass
で任意の初期化を必要とF2()
をインスタンス化していないクラスが書かれていないと思います。絶対基本的にストリップダウンまた、おそらく、単一静的メソッド関数オブジェクトのすべてがこのように使用されるわけではないので、別の言語(Java?)からのスタイルのキャリーオーバーがあります。そこでは、著者が将来的にそのように使用されるかもしれないと思った場合、あるいはパラメータでインスタンス化する必要性を獲得する可能性がある場合は、理にかなっています。
とにかく、私は何かを学んだし、将来他の人がやることを願っています。
EDITは後で追加:この使用法は今最適な熟考functools.partial
def f1(x, max=None):
return x < max
#elsewhere ...
checkers.append(functools.partial(f1, max=i+j))
を使用して行われているかもしれないものと同じを達成します。また、このクラスの使用法は、オブジェクトの「継承、合成、集約」分類にどのように適合しますか。そして、それが例外であるかどうか
これを行うには、1つ、好ましくは唯一の方法が必要です。 あなたがオランダ人でない限り、その方法は最初は明白ではないかもしれませんが。
私はそれが、他の言語からPythonに持ち越された奇妙な文法的な変わったものだと思います。私は、Javaプログラマが書いた冗長なPythonコードを見てきました。 – khelwood
このメソッドは決して*動的に使用されませんか?それはいくつかの状況で理にかなっているので... 'checkers = [CSVChecker()、...];すべて(チェッカーのcのためのc.is_ok(foo)) ' – deceze
あなたは著者に質問してみませんか? – jonrsharpe