クラスと関数があるとします。
class AddressValidator(self):
def __init__(self):
pass
def validate(address):
# ...
def validate_address(addr):
validator = AddressValidator()
return validator.validate(addr)
この関数は、クラスを使用するためのショートカットです。では、この関数を何千回も実行する必要がある場合はどうなるでしょうか。データベースへの接続など、バリデータクラスが実際にインスタンス化で何かをしなければならない場合、それを何千回も何度も作成するのはかなり無駄です。私はおそらくこのようなことができるかどうか疑問に思っていました:
def validate_address(addr):
if not hasattr(validate_address, 'validator'):
validate_address.validator = AddressValidator()
validator = validate_address.validator
return validator.validate(addr)
これで、バリデータ クラスは 1 回だけインスタンス化され、「関数内」に保存されます。ただし、これが行われたのを見たことがないので、悪い習慣だと思います。もしそうなら、なぜですか?
注: モジュール グローバルにバリデータ オブジェクトをキャッシュするだけでよいことはわかっています。モジュールのポイ捨てを避けたいときに、これが実行可能な解決策であるかどうか、私はただ興味があります。