外部類考慮這段代碼:訪問來自內部蟒蛇
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()
我所試圖做的似乎有點不合法的。不過,我相信有一種方法可以做到。好像我可能必須重寫得到方法的地方。非常感謝您的幫助!
這裏是辦法,我打算用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](http://www.python.org/dev/peps/pep-0008/#class-names)建議只使用'CapWords'作爲類名 - 它使代碼更具可讀性。同樣,它建議不要排列作業。這裏也沒有外部或內部類(儘管這樣的概念在Python中無關緊要)。 – 2013-03-05 22:41:40
它已經可以工作了,只需添加一個'self'參數即可。 – 2013-03-05 22:42:51
@MartijnPieters它不會,你需要一個'Pages'的實例 - 你不能透過這個類。 – 2013-03-05 22:43:43