在调用类实现的实例中调用方法 - 但在其他方面不相关

时间:2014-06-22 05:40:41

标签: python class methods

说我有这个文件结构:

  • 项目
    • GUI
      • gui.py
      • 小窗口
        • base_widg.py
    • MIDI
      • main.py

main.py 包含一个名为引擎的类,以及一个名为 midi_out

的方法

base_widg.py 包含一个名为 BaseWidg

的类

gui.py 是我在测试整个程序时运行的文件,并在 main中实现了 Engine 类的实例。 py base_widg.py

中的 BaseWidg 类的实例

BaseWidg 中有一个方法需要在引擎

的已实现实例中调用 midi_out 函数

修改

引擎 init 功能中

self.midiout = rtmidi.MidiOut()

这很重要,因为许多其他方法需要此声明,包括 midi_out ,因为:

def midi_out(self, note, vel, state):
    # figure out what channel is (irrelevant)
    self.midiout.send_message([channel, note, vel)

不幸的是,这往往意味着我不能使用@staticmethod ......

最狡猾和最有效的方法是什么?我是否需要更改程序的结构?

可能不相关:我使用的是python 2.7,pygtk 2和python_rtmidi。

1 个答案:

答案 0 :(得分:1)

一种选择是让 BaseWidg 的构造函数获取引擎的实例并将其存储为实例变量。然后,您只需在 BaseWidg 中调用引擎实例的midi_out()方法。

相关问题