私はこれができるようになりたいです:
class A(object):
@staticandinstancemethod
def B(self=None, x, y):
print self is None and "static" or "instance"
A.B(1,2)
A().B(1,2)
これは簡単な解決策があるはずの問題のように思えますが、私はそれを考えることも見つけることもできません。
私はこれができるようになりたいです:
class A(object):
@staticandinstancemethod
def B(self=None, x, y):
print self is None and "static" or "instance"
A.B(1,2)
A().B(1,2)
これは簡単な解決策があるはずの問題のように思えますが、私はそれを考えることも見つけることもできません。
可能ですが、しないでください。私はそれを実装せずにはいられませんでした:
class staticandinstancemethod(object):
def __init__(self, f):
self.f = f
def __get__(self, obj, klass=None):
def newfunc(*args, **kw):
return self.f(obj, *args, **kw)
return newfunc
...そしてその使用:
>>> class A(object):
... @staticandinstancemethod
... def B(self, x, y):
... print self is None and "static" or "instance"
>>> A.B(1,2)
static
>>> A().B(1,2)
instance
悪!
とにかく静的メソッドのケースを使用して新しいクラスを作成したいので、それを通常のメソッドにして、__init__
メソッドの最後で呼び出すのが最善です。
または、それが不要な場合は、クラスの外部に別のファクトリ関数を作成して、新しい空のオブジェクトをインスタンス化し、そのオブジェクトで目的のメソッドを呼び出します。
おそらくあなたが求めているものを正確に作成する方法はありますが、それらはPythonの内部メカニズムをさまよって、混乱し、python2.xと3.x間で互換性がありません-そして私はそれの本当の必要性を見ることができません。
あなたが言っていることから、これはあなたが探しているものの線に沿っていますか?「ビルトイン」であるとあなたが言っていることを正確に行う方法があるかどうかはわかりません
class Foo(object):
def __init__(self, a=None, b=None):
self.a
self.b
def Foo(self):
if self.a is None and self.b is None:
form = CreationForm()
else:
form = EditingForm()
return form
あなたの質問への答えはノーです、あなたはそれをすることはできません。
Pythonは通常の関数もサポートしているので、私が行うことは、そのクラスの外部で関数を定義し、通常のメソッドからその関数を呼び出すことです。発信者は、どれが必要かを決定できます。