【问题标题】:Using property and setter in python 2.5.1 or older在 python 2.5.1 或更早版本中使用属性和设置器
【发布时间】:2014-10-18 02:43:49
【问题描述】:
如何使用 Python 2.5.1 中未实现的@property.setter。
这是一个如何在较新版本的 python 中执行此操作的示例。
由于我使用的是旧版本的 Python,因此我无法真正使用此代码。
class Info(object):
def __init__(self):
self.x = None
@property
def x(self):
return self.x
@x.setter
def x(self, value):
self.x = value
test = Info()
test.x = "It works!"
print(test.x)
输出:有效!
【问题讨论】:
标签:
python
class
properties
setter
python-2.5
【解决方案1】:
这是一种方法。
您可以使用__get__ 和__set__ 作为替代。这可以在 2.5.1 或更早版本的 Python 中使用
class Info(object):
def __init__(self):
self.x = None
class x:
def __init__(self):
pass
def __get__(self, instance):
return instance.x
def __set__(self, instance, value):
instance.x = value
test = Info()
test.x = "It works too, in 2.5.1"
print(test.x)
输出:在 2.5.1 中也可以使用
【解决方案2】:
2.5 中的属性支持 fget、fset 和 fdel,但不支持 @property.setter 装饰器。
所以,有两个解决方案:
- 不要将属性用作装饰器,而应用作函数;
- 创建一个派生类添加它们。
第一个解决方案:
class Info(object):
def __init__(self):
self._x = None
def get_x(self):
return self._x
def set_x(self, value):
self._x = value
x = property(get_x, set_x)
第二种解决方案:
class _property(__builtin__.property):
def getter(self, fget):
return __builtin__.property(fget, self.fset, self.fdel)
def setter(self, fset):
return __builtin__.property(self.fget, fset, self.fdel)
def deleter(self, fdel):
return __builtin__.property(self.fget, self.fset, fdel)
try:
property.getter
except AttributeError:
property = _property