Найти - Пользователи
Полная версия: добавить метод в объект
Начало » Python для экспертов » добавить метод в объект
1
pythonwin
может быть кто-то сталкивался - добавление метода к объекту - попробовал через присваивание атрибуту объекта функции - не получилось, т.к. при вызове этой функции нужно в параметрах указывать сам объект
>>> 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': {}}
>>>   
Striver
Видимо такое присвоение только для класса работает, но не для объекта:

>>> 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’: {}}
pythonwin
в том и дело что нужно у объекта…
через декораторы это возможно сделать?
http://www.ragbag.ru/2006/11/07/python_decorators/


проблему решил через потомка - спасибо за помощь!
j2a, OlDer,Striver
спасибо за помощь!
j2a
Два шага не хватило…

>>> 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). К классу - методы экземпляра.
bialix

import new
help(new.instancemethod)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB