0

还有什么“Pythonic”?

user.fullname = fullname
user.gender= gender
user.description = description

对比

user.update_profile(fullname, gender, description)

显然,后者在大多数情况下只是前者的包装器(也是我的偏好),但是我在网上看到的所有关于直接访问(使用属性装饰器)如何更像 Python 的讨论,我只是好奇。

4

2 回答 2

2

两者都不像另一个或多或少是pythonic。他们有不同的用例。

当您希望能够逐个更新属性时,请使用前者。需要时将其替换为属性。但是,当设置属性具有超出验证的副作用时,请务必使用显式方法。

当您必须同时更新所有三个属性时使用后者,例如当您需要对值的组合进行完整性检查时。没有特殊的语法可以合理地替换这个习语。

于 2012-09-05T21:23:10.533 回答
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-type 方法比分配可能发生的更清楚

于 2012-09-05T21:37:18.120 回答