ABC에서 상속 된 인스턴스 변수에 대해 약간 혼동합니다. 나는 나의 혼란을 보여주는 모범을 보았습니다. 클래스 A는 클래스 B가 상속하는 목록을 필요로하지만 클래스 객체가 아닌 인스턴스 객체 여야합니다. 그러나 클래스 B는 자체 인스턴스 변수 local도 필요합니다. 누구든지 나를 똑바로 세울 수 있니?추상 기본 클래스에서 상속 된 객체를 혼동합니다.
#!python
from abc import ABCMeta, abstractmethod, abstractproperty
import unittest
class A(object):
__metaclass__ = ABCMeta
_internal = ['initialized']
@property
def internal(self):
return self._internal
def get_a(self):
return self._internal
@abstractmethod
def set_a(self, value):
pass
class B(A):
def __init__(self):
self.local = 'OK'
def get_local(self):
return self.local
def set_a(self, value):
self._internal.append(value)
class TestCase(unittest.TestCase):
def test_implementation(self):
self.assertEqual(['initialized'], B().get_a()) # this passes but for wrong reason
b_used = B().set_a('used')
b_unused = B()
print "b_used.get_a() should return ['initialized','used']"
print "b_unused.get_a() should return ['initialized']"
print "b_used.get_local() should equal b_unused.get_local() = 'OK'"
self.assertEqual(['initialized'], b_unused.get_a()) # >> fails with ['initialized'] =! ['initialized', 'used']
self.assertNotEqual(b_unused.get_a(), b_used.get_a())
if __name__ == "__main__":
unittest.main()
문제는 내가 그것을
이 숙제인가 : 당신은 또한 당신의 단위 테스트를 수정해야
? 그렇지 않은 경우 위에 설명한 것처럼 getter/setter 메서드를 사용하지 않는 것이 더 좋습니다. 파이썬에서는 추천하지 않습니다. – Daenyth