【问题标题】: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 装饰器。

    所以,有两个解决方案:

    1. 不要将属性用作装饰器,而应用作函数;
    2. 创建一个派生类添加它们。

    第一个解决方案:

    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
    

    【讨论】:

    猜你喜欢
    • 2014-11-23
    • 1970-01-01
    • 2014-12-05
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多