如何为函数调用赋值?

2024-04-25 06:13:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试构建一个名为“Point”的类来表示三维坐标(x,y,z)。你知道吗

class Point(object):

    def __init__(self):
        a = 3
        self.data = [[[bool(False) for x in xrange(a)] for y in xrange(a)] for z in xrange(a)]

    def __call__(self, x, y, z):
       return 'call :'+self.data[x][y][z]'

我可以很容易地访问一个点:

p = Point()
print p(1 ,1, 1)   # output : False`

但是,我不能给这一点赋值!你知道吗

p(1, 1, 0) = True  # SyntaxError: can't assign to function call

你知道吗?你知道吗


Tags: inselffalsefordatareturnobjectinit
1条回答
网友
1楼 · 发布于 2024-04-25 06:13:54

如果你这样写,你会得到以下错误:

SyntaxError: can't assign to function call

请注意,这是一个SyntaxError,这意味着Python甚至懒得尝试来计算它。它说:在Python语法中,不是这样的,所以它不应该这样工作。你知道吗

一件与你的要求非常接近的事情是重写__setitem__函数,这样你就可以用p[1,1,0]赋值(注意这些是方括号)。比如:

class Point(object):

    def __init__(self):
        a = 3
        self.data = [[[bool(False) for x in xrange(a)] for y in xrange(a)] for z in xrange(a)]

    def __setitem__(self,idx,val):
        i,j,k = idx
        self.data[i][j][k] = val

    def __call__(self, x, y, z):
       return 'call :'+str(self.data[x][y][z])

现在它的工作原理是:

>>> p = Point()
>>> p(1,1,0)
'call :False'
>>> p[1,1,0] = True # note the square brackets
>>> p(1,1,0)
'call :True'

相关问题 更多 >