Найти - Пользователи
Полная версия: Аттрибут-функция у класса
Начало » Python для новичков » Аттрибут-функция у класса
1
svas
Если определить класс таким образом
class SomeClass:
some_function = fn
где fn - обычная функция, а потом вызвать ее:
self.some_function(...)
то в функцию передается дополнительный аргумент self.
Как можно определить класс с атрибутом-функцией, чтобы в нее не передавался дополнительный аргумент?
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)
Интересно…
appetito
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)
Александр Кошелев
lass SomeClass:
some_function = staticmethod(fn)
appetito
Александр Кошелев
lass SomeClass:
some_function = staticmethod(fn)
так значит staticmethod - это всего-лишь
def mystatic(fn):
def _mystatic(self, *args, **kw):
return fn(*args, **kw)
return _mystatic
?
Андрей Светлов
Нет. Это реализация дескриптора:
http://docs.python.org/reference/datamodel.html#implementing-descriptors
svas
Я пока сделал чз декораторы
bazooka
через staticmethod?
svas
нет, как в посте №5
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