【发布时间】:2013-03-05 22:40:30
【问题描述】:
考虑这段代码:
class Page(object):
def __init__(self, name, title):
self.name = name
self.title = title
self.selected = False
def select(self): <-- How can I make this method work?
for Page in Pages:
Page.selected = False
self.selected = True
class Website(object):
def __init__(self):
self.index = Page("index", "Home")
self.settings = Page("settings", "Settings")
self.users = Page("users", "Users")
self.logs = Page("logs", "Logs")
self.faq = Page("faq", "FAQ")
def __iter__(self):
return iter([self.index, self.settings, self.users, self.logs, self.faq])
Pages = Website()
我正在尝试做的事情似乎有点非法。不过,我确信有办法做到这一点。看来我可能不得不在某处重写 get 方法。非常感谢您的帮助!
这是我打算使用 Bottlepy 使用这些类的方式:
设置页面:
@route('/')
@route('/<selectedPage>')
@route('/<selectedPage>/')
def dynamic_routing(selectedPage='index'):
for Page in Pages:
if selectedPage == Page.name:
Page.select()
return template('default')
检索页面信息(在 Bottlepy 模板内):
%for Page in Pages:
%if Page.selected:
<title>{{Page.title}}</title>
%else:
<title>Page Not Found</title>
%end
%end
我现在将代码编辑为工作版本。谢谢大家这么快的输入!!!你们真棒!仍然可能不是最好的方法,但我现在想不出另一种方法来解决它。
【问题讨论】:
-
PEP-8 建议仅使用
CapWords作为类名 - 它使代码更具可读性。同样,它建议不要排列作业。这里也没有外部类或内部类(尽管这些概念在 Python 中完全无关紧要)。 -
它已经可以工作了,只需添加一个
self参数。 -
@MartijnPieters 它不会,你需要一个
Pages的实例——你不能浏览整个类。 -
@Lattyware:他用
Pages实例替换了Pages类。 -
@MartijnPieters 构造函数将在此之前运行。
标签: python class outer-join