2017-03-29 9 views
-1

3D 좌표 (x, y, z)를 나타내는 "Point"라는 클래스를 작성하려고합니다. 나는이 시점에 값을 할당 할 수 없습니다,함수 호출에 값을 할당하려면 어떻게해야합니까?

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

을하지만 :

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(1, 1, 0) = True # SyntaxError: can't assign to function call 

어떤 아이디어가 있습니까? 이 가를 평가하는 시도에 파이썬도 귀찮게하지 않는 것을 의미 SyntaxError 것을

SyntaxError: can't assign to function call

참고 :이 것을 쓰는 경우

+2

은 무엇 예상되는 행동을 할 것인가? 파이썬에서는 호출에 할당 할 수 없습니다. –

+0

문자열과 부울을 연결할 수 없습니다. 'call :'+ self.data [x] [y] [z]' – RaminNietzsche

+0

'점'은 실제로 ** 큐브 **입니다. 3 x 3 x 3 큐브. –

답변

0

는 글쎄, 당신은 다음과 같은 오류가 발생합니다. 파이썬 문법에없는 이므로 그렇게 작동하지 않아야합니다.

당신이 (이 대괄호 참고) p[1,1,0]으로 할당 할 수 있도록 __setitem__ 기능을 무시 당신이 무엇을 물어에 비트 가까운 온다 일. 마찬가지로 :

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' 
+0

고마워, 괜찮아. – iakoutsk

+0

내 유일한 관심사는 get과 set 메소드에서 동일하지 않은 구문에 관한 것입니다 : p [1,1,0] = 값을 설정하려면 True, 값을 얻으려면 p (1, 1, 0) ... 어쨌든, 당신의 지원에 감사드립니다! – iakoutsk

+0

@iakoutsk :'p (1,1,0)'대신'p [1,1,0]'으로 값을 얻을 수 있도록'__getitem__'을 오버라이드 할 수도 있습니다 ... –

관련 문제