gpt4 book ai didi

python - 使用 property() 和 @property 定义的属性

转载 作者:行者123 更新时间:2023-11-30 22:48:55 25 4
gpt4 key购买 nike

我现在正在尝试正确学习Python,并且我对创建对象属性的两种方法的存在感到非常困惑:使用 @property装饰器和 property()方法。因此以下两条都是有效的:

class MyClassAt:
def __init__(self, value):
self._time = value

@property
def time(self):
return self._time

@time.setter
def time(self, value):
if value > 0:
self._time = value
else:
raise ValueError('Time should be positive')

class MyClassNoAt:
def __init__(self, value):
self._time = value

def get_time(self):
return self._time

def set_time(self, value):
if value > 0:
self._time = value
else:
raise ValueError('Time should be positive')

time = property(fget=get_time, fset=set_time)

有使用哪一个协议(protocol)吗? Pythonista 会选择什么?

最佳答案

它们是等效的,但首选第一个,因为许多人发现它更具可读性(同时也不会使代码和命名空间困惑)。第二种方法的问题是您定义了两个永远不会使用的方法,并且它们保留在类中。

只有当必须支持非常旧的 Python 版本(不支持装饰器语法糖)时,才会使用第二种方法。 Python 2.4 中添加了函数和方法装饰器(而类装饰器仅在版本 2.6 中添加),因此在几乎所有情况下这都是过去的问题。

关于python - 使用 property() 和 @property 定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40004026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com