私はselfパラメータにいくつかの問題があります。そして、Pythonの一見矛盾した動作が私を迷惑にしています。私はクラス、Foo
を持っています。このクラスには、m1
からmN
までの一連のメソッドがあります。これらのうちのいくつかについては、下記のm1
のような標準的な定義を使用します。しかし、他の人にとっては、私がm2
とm3
で行ったように、メソッド名を直接代入する方が便利です。今Pythonとselfパラメータ
import os
def myfun(x, y):
return x + y
class Foo():
def m1(self, y, z):
return y + z + 42
m2 = os.access
m3 = myfun
f = Foo()
print f.m1(1, 2)
print f.m2("/", os.R_OK)
print f.m3(3, 4)
、私はos.access
がself
パラメータ(一見)を取らないことを知っています。そして、このタイプの割り当てにはまだ問題はありません。しかし、私は自分のモジュールで同じことをすることはできません(myfun
はmymodule.myfun
で定義されていると想像してください)。上記のコードを実行すると、次の出力が得られます。
3
True
Traceback (most recent call last):
File "foo.py", line 16, in <module>
print f.m3(3, 4)
TypeError: myfun() takes exactly 2 arguments (3 given)
問題が原因私は仕事の枠組みに、私は少なくともクラスFoo
を避けることができない、ということです。しかし、ダミーのクラスに私のmymodule
のものがあるのを避けたいです。これを行うには、私は何かalaをする必要があります
あなたがそれらのような20を持っている場合、これは非常に冗長です。ですから、どうやってどうやってやっているのでしょうか?それとも、どうやらもっとスマートなやり方で、どうやって自分のモジュールを組み込みのように振る舞うかということです。
あなたの一般的なポイントは、理にかなって、私はモジュールはC、Pythonの、またはBefunge –
ポイントで書かれているかどうかをどのようにその関連が表示されませんインタプリタに動的にリンクされた*ネイティブコード*として実行されるということです。あなたは正しいのですが、コンパイルされた言語でも構いません。 –
'staticmethod'は、正常に動作します。しかし、組み込みのコードやネイティブコード、あるいはどんなIMOでも、動作が異なるはずはありません。だから、私は作業コードのために解決すると思うし、理解は別の時に来る必要があります。 – Svend