Python - Существует функция, которая вызвана, когда объект не реализует функцию?

Я рассматриваю то же самое. На Открыть сайте ID существует ссылка 'Для Разработчиков' http://openid.net/developers/ и оттуда ссылка для 'Открытия Библиотек' http://wiki.openid.net/Libraries и наконец оттуда та под названием 'DotNetOpenID' http://dotnetopenid.googlecode.com/ , который является, вероятно, что Вы ищете.

Удача.

7
задан Lucas Gabriel Sánchez 30 November 2009 в 14:31
поделиться

4 ответа

Вот предложение того, что вы хотите сделать:

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
7
ответ дан 6 December 2019 в 14:05
поделиться

Вы ищете метод __ getattr __ . Посмотрите здесь .

Если вы хотите «полный контроль» над классом, посмотрите на специальный метод __ getattribute __ , затем ( здесь ).

3
ответ дан 6 December 2019 в 14:05
поделиться

Вы смотрели на объект. __ getattr __ (self, name) или объект. __ getattribute __ (self, name) для классов нового стиля? (см. Имена специальных методов, справочник по языку Python )

3
ответ дан 6 December 2019 в 14:05
поделиться

Я не знаю, почему у 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 __ в классе, и это немного запуталось.

2
ответ дан 6 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: