Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> доопределить методы объекту 
V
    Опции темы
dipsy
Дата 6.8.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 13.1.2005
Где: Нижний Новгород

Репутация: нет
Всего: нет



существующему объекту можно доопределить метод 
Код
def foo():
    return "a"
object.foo = foo

можно сделать так, чтобы метод имел доступ к объекту:
Код
def foo( self ):
    return repr( dir( self ) )

object.foo = foo
req.write( repr( object.foo( object ) ) )

можно ли определить метод для объекта, чтобы не передавать сам же объект в качестве параметра, но иметь доступ к объекту?
PM MAIL WWW   Вверх
Lazin
Дата 6.8.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 2
Всего: 154



да вроде-бы нельзя, а зачем это нужно?
PM MAIL Skype GTalk   Вверх
_Viper_
Дата 6.8.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 8.11.2006

Репутация: 10
Всего: 11



Можно сделать так, взято с ASPN Cookbook:
Код

class A(object):
    def func(self):
        print self.__class__.__name__

def func1(self):
    print "func1"

def func2(self):
    print "func2"

def add_method_to_one(self, method, name=None):
  if name is None: name = method.func_name
  class new(self.__class__): pass
  setattr(new, name, method)
  self.__class__ = new

def add_method_to_all(self, method, name=None):
  if name is None: name = method.func_name
  setattr(self.__class__, name, method)

a = A()
b = A()

a.func()
b.func()
print

add_method_to_all(b, func2, "func")
a.func()
b.func()
print

add_method_to_one(a, func1, "func")
a.func()
b.func()

PM MAIL   Вверх
dipsy
Дата 7.8.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 13.1.2005
Где: Нижний Новгород

Репутация: нет
Всего: нет



именно то, что надо! спасибо!
PM MAIL WWW   Вверх
silently_fox
Дата 8.8.2008, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.9.2006

Репутация: 1
Всего: 1



можно еще декоратор прикрутить:

Код

class dynamicmethod(object):
    """Class implements decorator for making instance methods

        Example:

            class Dummy(object): pass
            dum = Dummy()

            @dynamicmethod(dum)
            def see_hello(self):
                return 'hello'

            print dum.see_hello() # prints 'hello'
    """

    def __init__(self, instance):
        self.instance = instance


    def __call__(self, func):

        # get instancemethod descriptor
        im_descriptor = self.__init__.__class__

        method = im_descriptor(func, self.instance, self.instance.__class__)
        setattr(self.instance, func.__name__, method)

        return method


def _test():
    class T(object):pass
    t=T()

    @dynamicmethod(t)
    def who(self):
        print 'opps!'

    t.who()


Это сообщение отредактировал(а) silently_fox - 8.8.2008, 00:53
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.