Форум сайта python.su
может быть кто-то сталкивался - добавление метода к объекту - попробовал через присваивание атрибуту объекта функции - не получилось, т.к. при вызове этой функции нужно в параметрах указывать сам объект
>>> class A1: pass ... >>> def a_1(self, *args, **kw): print locals() ... >>> a1=A1() >>> setattr(a1, 'a_1', a_1) >>> a1.a_1 <function a_1 at 0xb7d91b54> >>> a1.a_1() Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: a_1() takes at least 1 argument (0 given) >>> a1.a_1(a1) {'self': <__main__.A1 instance at 0xb7d9718c>, 'args': (), 'kw': {}} >>>
Офлайн
Видимо такое присвоение только для класса работает, но не для объекта:
>>> class A1: pass
…
>>> def a_1(self, *args, **kw): print locals()
…
>>> a1=A1()
>>> a1
<__main__.A1 instance at 0x01293D50>
>>> a1.a_1=a_1
>>> a1.a_1()
Traceback (most recent call last):
File “<interactive input>”, line 1, in ?
TypeError: a_1() takes at least 1 argument (0 given)
>>> del a1.a_1
>>> A1.a_1=a_1
>>> a1.a_1()
{'self': <__main__.A1 instance at 0x01293D50>, ‘args’: (), ‘kw’: {}}
Офлайн
в том и дело что нужно у объекта…
через декораторы это возможно сделать?
http://www.ragbag.ru/2006/11/07/python_decorators/
проблему решил через потомка - спасибо за помощь!
j2a, OlDer,Striver
спасибо за помощь!
Отредактировано (Апрель 6, 2007 14:40:25)
Офлайн
Два шага не хватило…
>>> class Klass: pass
>>> def method(*args, **kwargs): print locals()
>>> instance = Klass()
>>> instance
<__main__.Klass instance at 0xb7d146cc>
>>> instance.static_method = method
>>> instance.static_method('arg', keyword='value')
{'args': ('arg',), ‘kwargs’: {'keyword': ‘value’}}
>>> Klass.instance_method = method
>>> instance.instance_method('arg', keyword='value')
{'args': (<__main__.Klass instance at 0xb7d146cc>, ‘arg’), ‘kwargs’: {'keyword': ‘value’}}
>>> instance.__class__.another_instance_method = method
>>> instance.another_instance_method('arg', keyword='value')
{'args': (<__main__.Klass instance at 0xb7d146cc>, ‘arg’), ‘kwargs’: {'keyword': ‘value’}}
Ага. Striver уже написал.
Смысл в том, что к объекту добавляются статичные методы (декоратор staticmethod). К классу - методы экземпляра.
Отредактировано (Апрель 6, 2007 14:41:50)
Офлайн
Офлайн
import new
help(new.instancemethod)
Офлайн