メソッドを持ち、関数またはプロパティとして呼び出すことは可能ですか?メソッドをプロパティまたは関数として呼び出しますか?
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
ので、不可能であると思わ:foo.barは__getattribute__
を呼び出します
- 。それはdescriptiorだ場合、
__get__
は)バーは()それも、発信者 - に返される前に、属性が関数であれば、それは機能のみを返し、その後(評価されていることを意味し、
__getattribute__
内から呼び出されます適用されます - その関数への呼び出し側が故に特性または機能
- を呼び出している場合はそのため、それは
__getattribute__
に検出することは不可能だ、デュアル動作が可能ではない
私は何を実装するために飛び乗っする(擬似コードのようなものです):
def __getattribute__():
if len(args)>1: return function
else: return property
しかし、引数が__getattribute__
または__get__
に渡されていないので、どこでどのようにプロパティと機能を切り替えるには、私は知りません。
問題は 'Foo'あなたは属性でやろうとしているのか分からないことを確かです:を呼び出す部分がない限り、' Foo' ... –
に伝達されていません。..プロパティによって返された結果が.__ call__メソッドを持っていて呼び出し元が結果を保持したり関数を呼び出すことができれば...それは悪くて醜いと疑わしい...しかし...おそらく – dkone
あなたはある程度まですることができます - デフォルトの結果を計算し、 '__call__'を結果に結びつけるプロキシ要素を生成します。問題は、この関数に副作用があると、これらが "起動"されるということです... –