2012-07-02 2 views
1

두 클래스 PairSequence이 있습니다. Pair 개체에는 position과 value의 두 가지 특성이 있습니다. Sequence 개체는 Pair 개체의 시퀀스입니다.다른 입력 인수가 전달 될 때 기본 클래스 객체 만들기

>>> Sequence([Pair(0, 2), Pair(2, 8), Pair(3, 1)) 
< Seq. 2 8 1 > 
>>> Sequence.pairs 
[< Position: 0, Value: 2 >, 
< Position: 2, Value: 8 >, 
< Position: 3, Value: 1 >] 

가 어떻게 아래의 코드처럼 만 Pair 값 목록을 제공하는 Sequence 개체를 만들 수 있습니다 :

class Pair(): 
    def __init__(self, position, value): 
     self.position = position 
     self.value = value 
     self.pair = (position, value) 

    def __repr__(self): 
     return "< Position: {0}, Value: {1} >".format(self.position, self.value) 

class Sequence(Pair): 
    def __init__(self, pairs): 
     self.pairs = pairs 
     self.cseg = [pair.value for pair in pairs] 
     self.positions = [pair.position for pair in pairs] 

    def __repr__(self): 
     return "< Seq. {0} >".format(" ".join([str(x) for x in self.cseg])) 

나는이와 Sequence 개체를 만들 수 있습니까? 이 경우 Pair 위치는 0에서 n - 1까지의 시퀀스 여야하며 여기서 n은 Sequence의 길이입니다.

>>> Sequence([2, 8, 1]) 
< Seq. 2 8 1 > 
>>> Sequence.pairs 
[< Position: 0, Value: 2 >, 
< Position: 1, Value: 8 >, 
< Position: 2, Value: 1 >] 

이 버전의 Sequence을 사용하려고했지만 작동하지 않았습니다. 그렇지 않으면 단순히 self.pairsPair 개체의 주어진 목록을 지정합니다, 다음은 당신이 비 Pair 개체 목록에 전달하는 Pair 개체의 목록을 생성합니다

AttributeError: 'int' object has no attribute 'value' 

class Sequence(Pair): 
    def __init__(self, pairs): 

     if not isinstance(pairs[0], Pair): 
      self = Sequence([Pair(pos, val) for pos, val in enumerate(pairs)]) 

     self.pairs = pairs 
     self.cseg = [pair.value for pair in pairs] 
     self.positions = [pair.position for pair in pairs] 

    def __repr__(self): 
     return "< Seq. {0} >".format(" ".join([str(x) for x in self.cseg])) 

답변

4

: :이 오류가 발생했습니다

class Sequence(Pair): 
    def __init__(self, pairs): 
     if not isinstance(pairs[0], Pair): 
      self.pairs = [Pair(pos, val) for pos, val in enumerate(pairs)] 
     else: 
      self.pairs = pairs 
     self.cseg = [pair.value for pair in self.pairs] 
     self.positions = [pair.position for pair in self.pairs] 

당신이 오류를 가지고 그 이유는 pairs의 내용에 수표에도 불구하고, 여전히 self.pairs에 할당하는 것입니다 :

,232 당신은 '대체'는 self 객체를 '덮어 쓰기'또는에 노력하고

self = Sequence([Pair(pos, val) for pos, val in enumerate(pairs)]) 

을하지만 당신이 건설하고 의미 :

마지막으로, 당신은 (self에 할당)를 생성자에서 다음을 수행해서는 안 생성자의 다른 Sequence 개체는 Sequence입니다. 이 경우에는 동일한 생성자에서 두 경우를 모두 처리 할 수 ​​있기 때문에 불필요합니다. 이는 차례 차례로 더 깨끗한 코드로 이어집니다.

관련 문제