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
。但是,您可以为每个实例指定不同的 lineColor
和 fillColor
。由于 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
。
我制作了一个 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
。但是,您可以为每个实例指定不同的 lineColor
和 fillColor
。由于 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
。