试图从函数创建对象属性

时间:2015-10-07 14:59:08

标签: python python-2.7 class properties

我正在尝试从函数创建对象属性,如下所示:

        for (int i = 0; i < scheduleArr.length; i++) //NOT i <= scheduleArr.length
        {
            scheduleArr[i][0] = employees.get(i);
        }

我已尝试按照previous Stack Overflow post的建议,但添加了属性class A: def get_x(self, neg=False): if neg: return -5 else: return 5 x = property(get_x) neg_x = property(get_x(neg=True)) 我收到了这个令人困惑的错误消息:

neg_x

2 个答案:

答案 0 :(得分:3)

当您尝试分配时:

neg_x = property(get_x(neg=True))

你实际上正在调用 get_x,没有self的实例,并尝试传递结果(-5,因此不是getter)到property。更简洁的方法是:

class A:

    @property
    def x(self):
        return 5

    @property
    def neg_x(self):
        return -self.x

如果你真的想使用这个功能,你可以使用例如lambda(或functools.partial)在访问属性时调用函数,而不是在定义属性时调用函数:

class A:

    def get_x(self, neg=False):
        if neg:
            return -5
        else:
            return 5

    x = property(get_x)

    neg_x = property(lambda self: self.get_x(neg=True))

使用中:

>>> a = A()
>>> a.x
5
>>> a.neg_x
-5

答案 1 :(得分:0)

我认为这对您有用:只需传递价值。你的否定检查最后一行。

class A:
    def get_x(self, neg=False):
        if neg:
            return -5
        else:
            return 5

    x = property(get_x)
    neg_x = property(get_x(True))