그것은 방법이 있고 어느 기능 또는 특성으로 호출 할 수 있습니까?메서드 또는 속성을 메서드로 호출합니까?
- foo.bar이
__getattribute__
를 호출합니다; 때문에def Foo: def bar(self,x=1,y=2): return x+y foo=Foo() foo.bar #should return 3 foo.bar(4,5) #should return 9
불가능한 것 같다 그것은 descriptior 인 경우에,
__get__
는 심지어 발신자 속성은 함수가있는 경우 - 에 반환되기 전에 막대()가 평가되는 것을 의미
__getattribute__
내에서 호출됩니다 만 적용되는 기능과 다음 ()를 반환 발신자가 속성 또는 따라서 기능 - 를 호출하면 그 기능 때문에 그
- 에, 그것은
__getattribute__
에 탐지하는 것은 불가능하다, 듀얼 행동은 내가 (의사 코드 같은 것입니다 구현하기 위해 미쳐 무엇
수 없습니다) :
def __getattribute__():
if len(args)>1: return function
else: return property
그러나 인수가 __getattribute__
또는 __get__
에 전달되지 않기 때문에, 나는 어디서 어떻게 재산과 기능 사이를 전환하는 방법을 모르겠어요.
문제는 Foo' 당신이 속성 무슨 말을하는 건가요 모르는 '것이 참으로 ... 호출 부분이 Foo''에 전달되지 –
하지 않는 한 .. . 속성에 의해 반환되는 결과가 .__ call__ 방법이 있고, 호출 측이 결과를 유지하거나 함수를 호출하도록 선택할 수 있다면 ... 그것은 어쩌면 – dkone
아니라 당신이 할 수있는 ... 나쁜 추한 의심 ...하지만 - 어느 정도 - 기본 결과를 계산하고 결과에 '__call__'을 첨부하는 프록시 요소를 생성합니다. 함수가 부작용이있는 경우 세터 전혀 __getattribute__ 호출하지 않기 때문에 문제는, 이러한, –