Ключевое слово аргумент в конструкторе камеры

Ребята, я недавно написал пару кодов о 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. Не могли бы вы любезно объяснить мне, что делает это утверждение? Поскольку есть две переменные с именем display, я просто заблудился.

1 ответ

Решение

То, что вы видите, - это использование ключевых аргументов.

return Camera(display = self.display)

Это вызывает конструктор для Camera создать новый объект этого класса, передавая self.display в качестве ключевого аргумента display,

Согласно PEP 8 (руководство по стилю), вы не должны использовать пробелы вокруг = подписать, так что следующее будет лучше стилистически, проясняя это не тест на равенство:

return Camera(display=self.display)

Если вы не понимаете, остальное (например, self.display часть), вам действительно нужно сначала прочитать основы классов в Python.

Другие вопросы по тегам