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