Camera构造函数中的关键字参数

时间:2014-06-08 06:51:01

标签: python traitsui keyword-argument

伙计们,我最近写了一些关于TraitUi的代码,其中一个例子对我很困惑。

以下是整个例子:

 __author__ = 'tk'

from threading import Thread
from time import sleep
from traits.api import *
from traitsui.api import View, Item, ButtonEditor

class TextDisplay(HasTraits):
    string = String()

    view = View( Item('string', springy= True, style = 'custom'))

class CaptureThread(Thread):
    def run(self):
        self.display.string = ' Camera started\n' + self.display.string
        n_img = 0
        while not self.wants_abort:
            sleep(.5)
            n_img += 1
            self.display.string = ' %d image captured\n' % n_img + self.display.string
        self.display.string = 'Camera stopped\n' + self.display.string


class Camera(HasTraits):
    start_stop_capture = Button()
    display = Instance(TextDisplay)
    capture_thread = Instance(CaptureThread)

    view = View(Item('start_stop_capture'))

    def _start_stop_capture_fired(self):
        if self.capture_thread and self.capture_thread.isAlive():
            self.capture_thread.wants_abort = True
        else:
            self.capture_thread = CaptureThread()
            self.capture_thread.wants_abort = False
            self.capture_thread.display = self.display
            self.capture_thread.start()

class MainWindow(HasTraits):
    display = Instance(TextDisplay, ())
    camera = Instance(Camera)

    def _camera_default(self):
        return Camera(display = self.display)
    view = View('display','camera', style = 'custom', resizable=True)

MainWindow().configure_traits()

我的问题是关于最后一堂课,叫做MainWindow。它定义了一个变量Camera:

return Camera(display = self.display)

上面的代码让我很困惑。有没有人可以帮我这个?我不太熟悉Python中的面向对象编程,也不熟悉Python中的Magic Method。请你帮我解释一下这句话有什么作用?因为有两个变量叫做显示,所以我迷路了。

1 个答案:

答案 0 :(得分:0)

您所看到的是使用keyword arguments

return Camera(display = self.display)

调用Camera的构造函数创建该类的新对象,并将self.display作为关键字参数display传递。

根据PEP 8(样式指南),您不应该在=符号周围使用空格,因此以下风格会更好,更清楚这不是一个相等的测试:

return Camera(display=self.display)

如果您不了解其余内容(例如self.display部分),则需要先阅读basics of classes in Python