更新:
谢谢你的回复。我想它最终帮助我的头脑中的东西点击现在
Python规定了此工作流:
@property
装饰器切换到getter/setter,以维护一致的API以减少重构与这些工作流相反:
或
@property
getter/setter再次感谢您帮助我了解这些事件的时间轴以及@property
的巨大用处
如果你们中的任何一个想添加一个答案,我会接受它来结束这个问题。 再次感谢🙏🏻
原件:
我一直在阅读Python的@property
装饰器
我理解,允许库用户获取class.property
之类的属性,同时允许库维护人员重构类属性接口背后的getter逻辑非常有用,就像getter方法一样
我不明白的是,为什么要费劲地使用装饰器来实现类似于属性的接口,比如class.property
。像class.property()
这样的接口这样的普通方法有什么问题
有什么我遗漏的吗?我不明白为什么方法调用中的额外括号有问题,足以保证使用decorator
也许下面的代码可以帮助解释我想做得更好的原因:
class Class:
def __init__(self, value):
self._value = value
def value(self):
return self._value
print(Class('calling method').value())
class Class:
def __init__(self, value):
self._value = value
@property
def value(self):
return self._value
print(Class('accessing property').value)
是因为它让二传手更漂亮吗?
所以不是:klass.set_value('some value')
你可以有吗?:klass.value = 'some value'
如下面的示例代码所示:
class Class:
def __init__(self, value):
self._value = value
def value(self):
return self._value
def set_value(self, value):
self._value = value
klass = Class('calling method')
klass.set_value('calling method2')
print(klass.value())
class Class:
def __init__(self, value):
self._value = value
@property
def value(self):
return self._value
@value.setter
def value(self, value):
self._value = value
klass = Class('accessing property')
klass.value = 'accessing property2'
print(klass.value)
使用@property
装饰器的原因纯粹是为了使类接口更美观吗
我确实认为界面最终看起来更好,但我想知道我是否遗漏了更多东西
感谢您抽出时间:)
我将发布一个答案来结束这篇文章,因为评论者似乎很忙:
Python规定了此工作流:
@property
装饰器切换到getter/setter,以维护一致的API以减少重构与这些工作流相反:
或
我希望这能帮助其他人更好地理解Python规定使用
@property
的原因相关问题 更多 >
编程相关推荐