Форум сайта python.su
class A:
def __init__(self):
self.a='a'
#A.m=lambda self, x: x*2
a=A()
a.v=lambda self, x: x*2
>>> a.v(z, 2)
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
a.v(z, 2)
NameError: name 'z' is not defined
>>> a.v(b, 2)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a.v(b, 2)
NameError: name 'b' is not defined
>>> b='b'
>>> a.v(b, 2)
4
>>> a.v("self", 2)
4
>>> a.v(1, 2)
4
Офлайн
>>> class A:
... pass
...
>>> A.m = lambda self, x: x * 2
>>>
>>> a = A()
>>> a.m
<bound method A.<lambda> of <__main__.A object at 0xb759ae2c>>
>>> a.m(3)
6
>>> a.m(1, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 2 positional arguments (3 given)
>>>
Офлайн
А что не так?
Офлайн
a.v=lambda self, x: x*2
a.v(2)
Traceback (most recent call last):
File “<pyshell#6>”, line 1, in <module>
a.v(2)
TypeError: <lambda>() takes exactly 2 arguments (1 given)
>>> a.v(, 2)
4
Почему два аргумента?
Офлайн
Malinaizerпотому что у вас лямбда от двух.
Почему два аргумента?
Офлайн
ты думаешь, там нужен self, а он там не нужен
в документации, скорее всего, описано это
похоже, что твой способ создания просто привязывает к атрибуту экземпляра функцию
как будто ты создал указатель, и поместил в него адрес функции
Офлайн
Спасибо! А можно как то привязать лямбу к атрибуту экземпляра, что бы она стала связаным или не связаным методом?
Отредактировано (Фев. 16, 2012 09:28:52)
Офлайн
чтобы метод стал связанным, нужно его в классе определять
а если ты класс менять не хочешь, то делаешь производный класс и меняешь его
Офлайн