2010-01-23 8 views
8

다음 코드를 사용하면 출력이 약간 어색해 보입니다. 왜 "기지에 도착"은 한 번만 인쇄됩니까? 그리고 왜 "베이스에 설치"가 전혀 인쇄되지 않았습니까? 실제 점점/설정 잘 작동하는 것 같다. 내가 뭘 놓치고 있니?파이썬 속성

class Base: 
    def __init__(self): 
     self.s = "BaseStr" 

    def getstr(self): 
     print "get in Base" 
     return self.s 
    def setstr(self, s): 
     print "set in Base" 
     self.s = s 
    str = property(getstr, setstr) 

b = Base() 
print b.str 
b.str = "Foo" 
print b.str 

출력 :

특성이 제대로 작동하려면 당신은 new-style classes를 사용할 필요가
get in Base 
BaseStr 
Foo 

답변

18

. 그래서 object에서 클래스를 파생 할 수있는 :

class Base(object): 
    ... 
+1

Spot on, 감사합니다. :) – Mizipzor

+0

그리고 파이썬 3.x에서는 이것을 할 필요가 없습니다. Python3의 모든 클래스는 새로운 스타일입니다. – treecoder

+1

그러나'object'를 하위 클래스로 만들지 않으면 고전 클래스에서 여전히'property'를 만들 수 있습니다. 그 이유는 무엇입니까? – Alcott

1

새로운 클래스를 생성 할 때마다는 object 유형에서 파생.