【发布时间】:2013-05-07 00:03:37
【问题描述】:
这是使用 Python 文档中给出的属性的示例:
Class C(object):
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
据我所知,这就像一个常规的无属性实例变量:
Class D(object):
def __init__(self):
self.x = None
当然,这不能为 getter 或 setter 添加额外的逻辑,但是,由于其他代码与 C 和 D 交互的方式没有区别,因此如果需要,您可以随时添加属性无需破坏任何其他代码。
我知道如果您使用在类级别声明的可变类型,这会产生问题,即:
class E(object):
x = [1,2,3]
但是,除了这种情况,在需要它们之前忽略这些属性是不好的做法,还是可以接受的?
谢谢!
【问题讨论】:
-
您所说的“在需要时忽略属性”是什么意思?
-
如果您需要在 getter 或 setter 中实际执行其他操作,请使用 D 类,然后将其更改为 C 类中的实现
-
当然。如果您不需要 getter 和 setter,请不要使用它们。它们只会使您的班级结构复杂化。另外,我会使用
@property装饰器:stackoverflow.com/questions/6304040/… -
我会说相反 - 如果没有必要,将代码与属性混在一起是不好的做法
标签: python properties