还有什么“Pythonic”?
user.fullname = fullname
user.gender= gender
user.description = description
VS
user.update_profile(fullname, gender, description)
显然,后者在大多数情况下(和我的偏好)只是前者的包装,但是我在网上看到关于如何直接访问(使用属性装饰器)更加pythonic的所有话题,我只是好奇。
答案 0 :(得分:2)
它们或多或少都不是pythonic;他们有不同的用例。
如果希望能够逐个更新属性,请使用前者。在需要时用属性替换它。但是,在设置属性时,请使用显式方法,使其具有超出验证的副作用。
必须一次更新所有三个属性时使用后者,例如当你需要对值组合进行健全性检查时。没有特殊的语法可以合理地取代这个习语。
答案 1 :(得分:2)
这取决于你打算如何使用这个类 - 我经常发现在实现它之前编写代码的理论用法很有用。例如,您可能会像这样使用User类:
user = User(fullname='Sally McExample', gender='F', description='...')
user.save()
# Later:
user = User.find(...)
user.fullname = 'Sally McChanged'
user.save()
鉴于您提出的update_profile
示例,相同的代码将是乏味的:
user = User.find(...)
user.update_profile('Sally McChanged', user.gender, user.description)
user.save()
请注意,如果您需要对数据进行更详细的处理而不是赋值(如值验证或文本清理),您可以将属性转换为property
...但是如果您预见到需要这样的行为从一开始,然后update_profile
- 类型方法使其更清晰,而不是分配可能发生