2012-10-08 3 views
0

개념적으로 반복자와 getter를 통해 배열로 가득 찬 배열에 액세스 할 수있는 python 개체가 있습니다. 그러나 배열의 각 요소의 정확한 값을 계산하는 것은 비용이 많이 들기 때문에 배열의 각 슬롯 내용에 대해 프록시 개체를 반환 한 다음 실제로 필요할 때 실제로 값을 계산합니다.lazily 문자열 값을 제공합니다.

즉, 내가 이것을 쓰고 싶습니다

bar = foo.get(10) # just returns a proxy 
baz = bar # increase proxy reference 
l = [baz] # actually increase proxy reference again. 
print baz # ooh, actually need the value. Calculate it only the fly. 
v = '%s' % bar # I need the value here again 
if bar is None: # I need the value here again 
    print 'x' 
if bar: # I need the value here again 
    print 'x' 
for i in bar: # I need the value here again 
    print i 

를 C++에서 필자는 역 참조 연산자 ... 어떤 생각을 너무 많이하려고 것인가?

  • 이 실제로 (모든 가능한 쓰임새를 다루려고 다음과 같은 경우

    나는 각각의 경우에 대해, 내가 특정 파이썬 '매직'기능 (print baz에 대한 같은 __str__)를 오버로드 할 수 있음을 이해하지만 난 궁금해 파이썬 마법 기능)

  • 사용자 정의 형식을 반환 것 파이썬에서이

답변

1

을 할 수있는보다 일반적인 방법이를 사용하여 포함하지 않는 변수의 콘텐츠에 액세스 할 수있는 방법이 있습니다, 그리고 재정의 __str__() 메서드는 인쇄시 문자열 표현을 계산합니다. 귀하의 사용 사례에 따라

class MyCustomType(object): 
    def __str__(self): 
     return "My string is really costly to produce" 

, 여전히 다양한 후크 파이썬에서 찾고있다 제공 :

  • 사용자 정의 클래스에 대한 액세스를 속성 __getattr__ 방법, 또는 property를 사용하여 더에 부착 될 수있다 .
  • 시퀀스와 비슷한 클래스 (목록, 튜플, 문자열) 매핑 유형 클래스의 개별 항목에 액세스하려면 __getitem__을 사용할 수 있습니다.

당신은 당신의 사용의 경우, 당신이하는 당신이 비싼 계산을 할 필요가 불가피하게 포인트로 연결해야 무엇에 따라 결정해야합니다. 파이썬은 거의 포인트가 객체의 수명 내에서 쉽게 가리킬 수 있도록합니다.

+0

죄송하지만 지금은 질문이 명확하지 않은 것이 분명합니다. 나는 그것을 편집했다. – mathieu

+0

@mathieu : 그러면 질문이 분명하지 않고 파이썬으로 좀 더 놀 필요가 있습니다. 커스텀 클래스가 여전히 존재하지만 마법의'__str__' 훅은 여전히 ​​인쇄의 가치를 제공하는 방법입니다. 사용자 정의 클래스이기 때문에 사용자가 지정한 API를 통해 인스턴스의 다른 데이터에 계속 액세스 할 수 있습니다. –

관련 문제