0
#!/usr/bin/python
class Bar(object):
@staticmethod
def ruleOn(rule):
if isinstance(rule, tuple):
print rule[0]
print rule[0].__get__(None, Foo)
else:
print rule
class Foo(object):
@classmethod
def callRule(cls):
Bar.ruleOn(cls.RULE1)
Bar.ruleOn(cls.RULE2)
@classmethod
def check(cls):
print "I am check"
RULE1 = check
RULE2 = (check,)
Foo.callRule()
出力のように動作しません:あなたは、私は将来の使用のためのタプルのクラスメソッド関数への参照を保存しようとして見ることができるようにタプルのクラスメソッドの参照を格納する変数
<bound method type.check of <class '__main__.Foo'>>
<classmethod object at 0xb7d313a4>
<bound method type.check of <class '__main__.Foo'>>
。
しかし、バインドされた関数を参照するのではなく、オブジェクト自体を格納しているようです。
ご覧のとおり、これは可変参照のために機能します。
__get__
を取得する唯一の方法は、それが属しているクラスの名前を必要とします。これは、RULE
変数割り当ての時点では利用できません。
ありがとうございました、これは理にかなっています。 ちょうど好奇心から〜 作成中にクラス名を取得する方法はありますか? –
いいえ。クラス本体が実行されている間、クラスオブジェクトは存在しません。クラスデコレータまたはメタクラスを使用して関数をバインドするのが最善の方法です。 –