Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 14, 2011 17:28:52

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Аттрибут-функция у класса

Если определить класс таким образом

class SomeClass:
some_function = fn
где fn - обычная функция, а потом вызвать ее:
self.some_function(...)
то в функцию передается дополнительный аргумент self.
Как можно определить класс с атрибутом-функцией, чтобы в нее не передавался дополнительный аргумент?



Офлайн

#2 Янв. 14, 2011 17:40:26

certanista
От:
Зарегистрирован: 2010-10-28
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Аттрибут-функция у класса

def func():
return 0
class Test:
num = func
def __init__(self):
self.fn = func
if __name__=="__main__":
t = Test()
print t.fn()#0
print t.num()#TypeError: func() takes no arguments (1 given)
Интересно…



Офлайн

#3 Янв. 14, 2011 18:27:52

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Аттрибут-функция у класса

certanista
def func():
return 0
class Test:
num = func
def __init__(self):
self.fn = func
if __name__=="__main__":
t = Test()
print t.fn()#0
print t.num()#TypeError: func() takes no arguments (1 given)
Интересно…
всё правильно, если функцию прописать в теле класса, то при создании экземпляра создается связанный метод, а если присваивать атрибут в __init__ - то функция так и останется функцией

class C(object):
ff = func
def __init__(self):
self.fn = func


>>> c=C()
>>> c.ff
<bound method C.func of <__main__.C object at 0x00C5A8F0>>
>>> c.fn
<function func at 0x00C41DF0>
>>> dir(fn)



Офлайн

#4 Янв. 14, 2011 18:47:13

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Аттрибут-функция у класса

lass SomeClass:
some_function = staticmethod(fn)



Офлайн

#5 Янв. 14, 2011 19:11:37

appetito
От:
Зарегистрирован: 2010-09-28
Сообщения: 147
Репутация: +  2  -
Профиль   Отправить e-mail  

Аттрибут-функция у класса

Александр Кошелев
lass SomeClass:
some_function = staticmethod(fn)
так значит staticmethod - это всего-лишь
def mystatic(fn):
def _mystatic(self, *args, **kw):
return fn(*args, **kw)
return _mystatic
?



Офлайн

#6 Янв. 15, 2011 14:52:13

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Аттрибут-функция у класса

Нет. Это реализация дескриптора:
http://docs.python.org/reference/datamodel.html#implementing-descriptors



Офлайн

#7 Янв. 15, 2011 20:03:11

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Аттрибут-функция у класса

Я пока сделал чз декораторы



Офлайн

#8 Янв. 16, 2011 02:39:14

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

Аттрибут-функция у класса

через staticmethod?



Офлайн

#9 Янв. 17, 2011 12:17:53

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Аттрибут-функция у класса

нет, как в посте №5



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version