이것은이 솔루션을 구현할 때의 상황을 설명하기가 쉽지 않으므로 매우 고안된 예제입니다. 그러나이 특별한 특성이 왜 발생하는지 누구든지 대답 할 수 있다면 감사 할 것입니다.파이썬에서 함수 정의 리디렉션
예 :
class A(dict):
def __init__(self):
self['a'] = 'success'
def __getitem__(self, name):
print 'getitem'
return dict.__getitem__(name)
class B(object):
def __init__(self):
self._a = A()
setattr(self, '__getitem__', self._a.__getitem__)
b = B()
c = b['a']
이 출력 : 그것은 (확실히 더 논리적 일 것입니다 서브 클래스)이 일의 기괴한 방법은 비록
c = b['a']
TypeError: 'B' object is unsubscriptable
, 왜 방법을 찾을 수 없습니다 명시 적으로 설정 했습니까? 내가 이렇게하면
:
dir(b)
내가이 얻을 :
['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__getitem__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', '_a']
같은 문제는 __iter__
같은 다른 방법으로 발생합니다. 작동하는이 메서드를 명시 적으로 정의하는 것은 무엇입니까?
힌트 :
여기에 적응 당신의 코드는 그것을 설명하기 쉽지 않은 경우, 그것은 좋은 생각이 아니다. 목표에 대한 고안된 경로 대신 목표를 설명해보십시오. 누군가는 당신에게 덜 인위적인 것을 줄 수 있습니다. –
알았어, 당연하지, 내가 해결할 실제 문제에 대한 질문을 올리면이 문제를 해결하는 가장 좋은 방법이 무엇이라고 생각하는지 알 수있다. – Dan
Dan :이 질문에 도달했으며 컨텍스트가 무엇인지 궁금한 사람들을위한 링크를 게시 할 수 있습니까? – MatrixFrog