Я рассматриваю то же самое. На Открыть сайте ID существует ссылка 'Для Разработчиков' http://openid.net/developers/ и оттуда ссылка для 'Открытия Библиотек' http://wiki.openid.net/Libraries и наконец оттуда та под названием 'DotNetOpenID' http://dotnetopenid.googlecode.com/ , который является, вероятно, что Вы ищете.
Удача.
Вот предложение того, что вы хотите сделать:
class callee:
def __init__(self, name):
self.name = name
def __call__(self):
print self.name, "has been called"
class A:
def __getattr__(self, attr):
return callee(attr)
a = A()
a.DoSomething()
>>> DoSomething has been called
Вы ищете метод __ getattr __
. Посмотрите здесь .
Если вы хотите «полный контроль» над классом, посмотрите на специальный метод __ getattribute __
, затем ( здесь ).
Вы смотрели на объект. __ getattr __ (self, name)
или объект. __ getattribute __ (self, name)
для классов нового стиля? (см. Имена специальных методов, справочник по языку Python )
Я не знаю, почему у luc были два разных класса. Вы можете сделать все это одним классом, если используете закрытие. Примерно так:
class A(object):
__ignored_attributes__ = set(["__str__"])
def __getattr__(self, name):
if __name__ in self.__ignored_attributes__:
return None
def fn():
print name, "has been called with self =", self
return fn
a = A()
a.DoSomething()
Я добавил бит о __ ignored_attributes __
, потому что Python искал __ str __
в классе, и это немного запуталось.