Форум сайта python.su
# coding: utf-8
class Page(object):
tpl = '/page'
@classmethod
def reg(cls):
def add(s):
return cls.tpl + s
from some import reg
reg(cls.add)
class Blog(Page):
tpl = '/blog'
Page.reg()
Офлайн
пока выкрутился так - регистрирую статический метод который редиректит на реальный метод:
# coding: utf-8
_methods = []
def regmethod(method):
_methods.append(method)
class Page(object):
tpl = '/page/'
@staticmethod
def add(cls,s):
return cls.tpl + s
@classmethod
def reg(cls):
def _add(s):
return cls.add(cls,s)
#from some import reg
regmethod(_add)
print 'Page.reg'
class Blog(Page):
tpl = '/blog/'
@staticmethod
def add(cls,s):
return cls.tpl + 'foo/' + s
Blog.reg()
print _methods[0]('test')
Офлайн
Попробуйте так
class page(object):
tpl='page'
@classmethod
def add(cls, tpl): cls.tpl+=tpl
class blog(page):
add, tpl=None, 'blog'
@classmethod
def add(cls, tpl): cls.tpl+='++'+tpl
>>> page.tpl, blog.tpl
('page', 'blog')
>>> page.add, blog.add
(<bound method type.add of <class '__main__.page'>>, <bound method type.add of <class '__main__.blog'>>)
>>> page.add('sssss'), blog.add('dddd')
(None, None)
>>> page.tpl, blog.tpl
('pagesssss', 'blog++dddd')
>>>
Отредактировано (Март 16, 2011 18:57:47)
Офлайн
ReinRausя регистрирую метод add в одном из методов класса
Попробуйте такclass page(object):
@classmethod
def reg(cls):
regmethod(_add)
Офлайн
Тогда так
class page(object):
tpl='page'
@classmethod
def add(cls, tpl): cls.tpl+=tpl
class blog(page):
tpl='blog'
@classmethod
def reg(cls, func): cls.add=classmethod(func)
def test(cls, tpl): cls.tpl+='/+/'
>>> page.add('1')
>>> blog.add('2')
>>> page.tpl, blog.tpl
('page/1', 'blog/2')
>>> blog.reg(test)
>>> blog.add('3')
>>> page.add('4')
>>> page.tpl, blog.tpl
('page/1/4', 'blog/2/+/3')
>>>
Офлайн
ReinRausтут метод подменяется не наследованием и вообще цель в другом.
Тогда так
_methods = []
class page():
tpl = 'page'
def reg(cls):
_methods.append( cls.add )
class blog(page):
tpl = 'blog'
def add(self,msg):
return self.tpl+msg
blog.reg()
print _method[0]('hello')
Офлайн
Посмотрите здесь - https://github.com/nod/tornado_addons/blob/master/tornado_addons/route.py - кажется это похоже на то, что Вы хотите.
Там надо будет заменить в 54 строке tornado.web.url на Вашу функцию для построения (типа klass.add(something)).
Офлайн