어떻게 속성 액세스를 파이썬에서 연기합니까?파이썬에서 메소드 호출을 Monkeypatching
def foo():
...
class Bar:
...
bar = Bar()
는 언제든지 bar
가 제공 될 것 콜백 foo()
에 의해 반환 된 값을 액세스 할 수 있도록 줄을 구현할 수 :
bar
이름이 이미 컨텍스트에 존재합니다. 그것이 액세스 의미가 보존되어야하는 이유입니다. 호출 할 수 없으며 클래스의 속성으로 바를 바꿀 수 없습니다. bar
대신 SomeClass.bar
을 사용하면 작동하지 않습니다. 나는 모든 것을 그대로 유지할 필요가 있지만, bar
이 생성 된 데이터를 즉석에서 참조하도록 프로그램을 변경하십시오. foo()
.
UPD : 답변을 주셔서 감사합니다.이 유형의 것은 파이썬에서 불가능합니다. 나는 해결 방법을 찾을거야. ,
class Bar:
data = property(lambda self: foo())
bar = Bar()
bar.data # calls foo()
"시간 표시 줄에 액세스 한"정확히 무엇을 의미합니까? 예 : bar의 속성에 액세스 할 때 또는 bar가 다른 것에 할당되었을 때를 의미합니까? –
단어의 의미에서 "게으른"단어가 아닙니다. 이것은 메서드 함수를 "monkeypatching"하므로 일반적인 메서드 함수 본문이 아닌 다른 것을 호출합니다. 귀하가하려는 것을 정확하게 반영하도록 질문을 변경하십시오. –
@Anurag Uniyal : 막대가 다른 것에 지정되면 의미합니다. @ S.Lott : 해결책은 모든 유형의 객체를 'monkeypatching'하는 것과 같습니다 (내 경우 DB 연결). 내가 '게으른'이라는 말은 단순히 '지연 시간'이었습니다. 만약 내가 쓰는다면, bar = baz.bazar라고 부르면, 오브젝트 바의 값이 그 할당보다 빠르지 않은 baz.bazar의 값을 취하기 위해 할당되기를 바란다. 통역사가 bar = baz.bazar에 도달 할 때 bar가 baz.bazar 값을 취하는 경우 정상적인 동작과는 달리 시간 지연이 발생합니다. 좋아, 질문을 변경. – Alex