2009-08-26 4 views
6

"좌표"라는 속성을 정의하는 포인트 클래스를 만들려고합니다. 그러나 예상대로 행동하지 않아 그 이유를 알 수 없습니다.Python 개체 @property

class Point: 
    def __init__(self, coord=None): 
     self.x = coord[0] 
     self.y = coord[1] 

    @property 
    def coordinate(self): 
     return (self.x, self.y) 

    @coordinate.setter 
    def coordinate(self, value): 
     self.x = value[0] 
     self.y = value[1] 

p = Point((0,0)) 
p.coordinate = (1,2) 

>>> p.x 
0 
>>> p.y 
0 
>>> p.coordinate 
(1, 2) 

세터 그 값을 설정 "해야한다"비록 그 p.x 및 p.y 어떤 이유로 설정되지 않습니다 보인다. 왜이 사람이 누군지 알아?

+0

파이썬 2.6+를 사용하고 있습니까? –

+0

오브젝트를 인스턴스화 한 직후에'p.coordinate'를 변경하려고 시도하기 전에 어떻게됩니까? –

+0

이것은 old-style-classes-vs-new-style-classes 클래스이며, property() 나 IDE가 그것을 잡을 것이라고 예상 할 수 있습니다. – smci

답변

9

property 메서드 (및 확장자는 @property 데코레이터) requires a new-style class 즉 서브 클래스 object입니다.

class Point: 

는 또한

class Point(object): 

되어야 예컨대

는 (다른 것들과 함께) setter 특성 파이썬 2.6 하였다.

+0

하지만 고전적인 클래스 안에'property'를 만들면 에러가 발생합니까? – Alcott

4

당신이 개체에서 포인트를 도출 경우가 작동합니다

class Point(object): 
    # ...