prg*_*enz 2 python twisted inversion-of-control
我对Twisted web框架非常感兴趣.据我所知,该框架使用好莱坞原则.我只知道这个术语,但完全不知道这个设计模式.我已经做了很多谷歌搜索在Python中实现好莱坞原则.但结果很少.有人能给我看一些简单的python代码来描述这个设计模式吗?
我以前从未听过"好莱坞原则"这个词,也不熟悉Twisted(虽然我觉得我应该这样).但控制反转的概念并不那么困难.我认为GUI编程是介绍它的好方法.从这里考虑以下内容(略微修改).
import Tkinter
class App(object):
def __init__(self, master):
frame = Tkinter.Frame(master)
frame.pack()
self.button = Tkinter.Button(frame, text="QUIT", fg="red", command=frame.quit)
self.button.pack(side=Tkinter.LEFT)
self.hi_there = Tkinter.Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=Tkinter.LEFT)
def say_hi(self):
print "hi there, everyone!"
root = Tkinter.Tk()
app = App(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
这是控制反转的一个非常简单的例子.它使用回调 - 因此是好莱坞原则的名字(感谢Sven的链接).这个想法是你写了一个函数,但你从来没有调用它.相反,你把它交给另一个程序并告诉该程序何时调用它.然后你控制该程序.以下是代码的详细说明:
import Tkinter
class App(object):
Run Code Online (Sandbox Code Playgroud)
我们从一个类定义开始,它将保存我们的回调并将它们传递给我称之为"主程序"的相应部分.
def __init__(self, master):
Run Code Online (Sandbox Code Playgroud)
我们班需要一个"硕士课程"; 主程序将调用我们定义的函数.在这种情况下,它是GUI的根窗口.更准确地说,在GUI编程的上下文中,我们可能会说它master是...的父级frame.
frame = Tkinter.Frame(master)
frame.pack()
Run Code Online (Sandbox Code Playgroud)
这两行创建了一个Frame对象,它本质上是一个包含小部件的框.你会在一秒钟内看到一个小部件.正如你所看到的,它也有一个父母 - 和我们的父母一样App:master.
self.button = Tkinter.Button(frame, text="QUIT", command=frame.quit)
self.button.pack(side=Tkinter.LEFT)
Run Code Online (Sandbox Code Playgroud)
self.button是一个小部件.当你使用它创建它时Tkinter.Button,你给它一些属性,比如label(text="QUIT").你也告诉它它的父母是什么 - 在这种情况下,不是master,但是frame.所以现在我们有一个等级 - master -> frame -> button.但我们做的最重要的事情是:command=frame.quit.这告诉按钮通过鼠标单击激活时该怎么做.简而言之,这就是回调.在这里,我们传递它frame的quit方法,在这种情况下导致整个程序退出.注意,该函数后面没有()-这是因为我们不做怎么称呼它.我们只想把它交给button.
self.hi_there = Tkinter.Button(frame, text="Hello", command=self.say_hi)
self.hi_there.pack(side=Tkinter.LEFT)
Run Code Online (Sandbox Code Playgroud)
这是另一个与第一个几乎完全相同的小部件,唯一的例外是self.quit我们已经通过而不是作为回调传递self.say_hi.由于这是在下面定义的,您可以替换您想要的任何功能.(在上面两组中,self.button.pack只是告诉Button它应该进入的位置frame.)
def say_hi(self):
print "hi there, everyone!"
Run Code Online (Sandbox Code Playgroud)
say_hi是您定义Hello按钮的功能的地方.
root = Tkinter.Tk()
app = App(root)
Run Code Online (Sandbox Code Playgroud)
现在我们调用我们的类,创建一个实例.我们创建根窗口,然后创建一个App以root其父级为例的实例.
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
然后我们完成了.我们将控制传递给Tkinter,后者完成剩下的工作.
| 归档时间: |
|
| 查看次数: |
1507 次 |
| 最近记录: |