2010-03-17 12 views
3

는 어떻게이 테스트 케이스파이썬 속성이 손상 되었습니까?

import unittest 

class PropTest(unittest.TestCase): 
    def test(self): 
     class C(): 
      val = 'initial val' 

      def get_p(self): 
       return self.val 

      def set_p(self, prop): 
       if prop == 'legal val': 
        self.val = prop 

      prop=property(fget=get_p, fset=set_p) 

     c=C() 
     self.assertEqual('initial val', c.prop) 

     c.prop='legal val' 
     self.assertEqual('legal val', c.prop) 

     c.prop='illegal val' 
     self.assertNotEqual('illegal val', c.prop) 

아래와 같이 실패 할 수 있는가? (속성을 지원하지 않습니다 그러므로와)

Failure 
Traceback (most recent call last): 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/unittest.py", line 279, in run 
    testMethod() 
    File "/Users/jacob/aau/admissions_proj/admissions/plain_old_unit_tests.py", line 24, in test 
    self.assertNotEqual('illegal val', c.prop) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/unittest.py", line 358, in failIfEqual 
    (msg or '%r == %r' % (first, second)) 
AssertionError: 'illegal val' == 'illegal val' 
+0

중복 : http://stackoverflow.com/questions/2240351/python-2-6-4-property-decorators-not-working –

+0

이것은 'property를 사용하려고하면 오류 메시지가 낫다는 합법적 인 비판입니다 '새로운 스타일의 클래스를 잊어 버렸습니다 /'Object' *를 상속해야합니다. IDEs가 이것을 잡을 수 있습니다. – smci

답변

13

클래스 Cobject이나 다른 새로운 스타일의 클래스에서 상속하지 않기 때문에 오래된 스타일의 클래스입니다. 설명자는 새로운 스타일의 클래스에만 해당됩니다. 수정하려면 class C()class C(object)으로 변경하십시오.

http://www.python.org/download/releases/2.2.3/descrintro/에 관심이있는 경우 몇 가지 세부 정보를 제공합니다. 새로운 스타일의 클래스는 여러면에서 더 좋습니다.

+0

감사합니다. 마이크. 그것은 빨랐다. 나는 여기에도 같은 대답을 우연히 발견했다. http://stackoverflow.com/questions/2240351/python-2-6-4-property-decorators-not-working – Jacob

관련 문제