我正在尝试从函数创建对象属性,如下所示:
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
答案 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))