说我有一个类和函数:把东西放入新的函数属性是不好的做法吗?
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)
现在Validator类是只实例化一次和“功能”保存,把这种方式。我从来没有见过这样做,所以我猜这是不好的做法。如果是这样,为什么?
注意:我知道我可以将验证器对象缓存在全局模块中。我只是好奇,如果这是一个可行的解决方案,当我想避免乱抛我的模块。
这不是一个不好的做法。毕竟,函数是对象。这只是为您的问题提供更好的解决方案。就像你说的那样:将'AddressValidator'存储在全局范围内。或者创建一个单身人士。或者将它作为参数传递。这取决于你的实际使用。 – freakish
哪里是添加一个函数和有一个实例arround你用它的区别?两个都取一个名字。请参阅Odomontois答案,以获得更好的解决方案 – ted