#!/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'>>
Как видите, я пытаюсь сохранить ссылку на функцию classmethod в кортеже для будущего использования.
Однако, похоже, он хранит сам объект, а не ссылку на связанную функцию.
Как вы видите, это работает для ссылки на переменную.
Единственный способ получить его - использовать __get__
, для которого требуется имя класса, к которому он принадлежит, который недоступен во время назначения переменной RULE
.
Есть идеи у кого-нибудь?