Python/Psychopy:从 class 中实例化多个圆形对象

Python/Psychopy: Instantiating multiple circle objects from a class

我制作了一个 class,其中包含一个圆圈(一个 Psychopy Circle 对象)。我想知道如何使用这个 class 实例化 2 个圆形对象,例如,每个对象都具有不同的填充颜色。

class Circle(object):
    def __init__(self):
        self.circle = visual.Circle(win, units = 'deg', pos=(1,1), 
        radius=1, lineColor="black", fillColor="red")

        self.components = [self.circle]

    def draw(self):
        [component.draw() for component in self.components]

circle=Circle() #red colour
circle2=Circle() #blue colour if possible

有没有办法让我在访问某些 visual.circle 参数时实例化 circle2,例如改变它的位置或填充颜色?这是我第一次使用 classes。目前,如果我将 'circle' 和 'cirle2' 绘制到屏幕上,一个只会覆盖另一个,因为一个只是另一个的副本。

干杯, 乔恩

您可以更改 class(__init__ 方法)的构造函数,添加属性 color 并在 fillColor 中将值更改为变量 color。有了位置你也可以做同样的事情。

根据您在评论中的说明,我假设您想要这样的内容:

class Circle(psychopy.visual.circle.Circle):
    def __init__(self, win, lineColor='black', fillColor='red'):
        super(Circle, self).__init__(
            win=win, lineColor=lineColor, fillColor=fillColor, units='deg',
            pos=(1,1), radius=1)

Circle 将默认为 units='deg'pos=(1,1)radius=1。但是,您可以为每个实例指定不同的 lineColorfillColor。由于 Circle 继承自 PsychoPy visual.Circle class,它具有其所有功能。对 super() 的调用实际上初始化了父 class。参见例如this post 有关 super() 函数的更多信息。

让我们把它付诸实践。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from psychopy import core, visual, monitors
import psychopy.visual.circle


class Circle(psychopy.visual.circle.Circle):
    def __init__(self, win, lineColor='black', fillColor='red'):
        super(Circle, self).__init__(
            win=win, lineColor=lineColor, fillColor=fillColor, units='deg',
            pos=(1,1), radius=1)


def main():
    # Create a temporary monitor configuration.
    monitor = monitors.Monitor('test_display')
    monitor.setWidth(60)
    monitor.setDistance(80)
    monitor.setSizePix((1440, 900))

    win = visual.Window(monitor=monitor)

    colors = ('red', 'green', 'blue')
    circles = [Circle(win=win, fillColor=color) for color in colors]

    for circle in circles:
        circle.draw()
        win.flip()
        core.wait(1)

    core.quit()


if __name__ == '__main__':
    main()

这段代码会创建三个不同颜色的Circle,并依次显示。我必须创建一个临时监视器配置,否则 PsychoPy 会拒绝在我当前的计算机上打开 Window