修改
我特此试着让自己更清楚。 我正在测试一个图像,所以我要编写一些方法来运行来分析图像。并非所有测试的图像都是相同的,因此我希望每个图像都有一个对象。 我要编写的许多方法都没有在所有图像上运行。例如,我有一种方法,它使用像素间距常数返回图像中心的阵列点的距离,该像素间距常数是图像的属性。这里我有一个例子,我读了一个图像,从而创建了对象图像,以及一些对我有用的属性。但是我的点对象,“属于”该图像,如果他们有自己的类,就不能访问这些属性;有一个点类是有用的,因为其他分析也使用点,并使用相同的方法。
class image(object):
def __init__(self, filepath)
#creates an instance of the image from filepath
xscale = self.read_header(xspacing)
xscale = self.read_header(yspacing) #pixels per mm property of image
class point(object):
def __init__(slef, i,j)
self.i = i # array position in image.
self.j = j
self.x = self.i * xscale #real position in mm in image
self.y = self.i * yscale ##but xscale and y scale are not in scope here.
所以问题是......我如何给像点对象属性,比如依赖于图像属性的距离,如xscale和yscale。在我看来,我希望允许image.point.x,其中image.point.x依赖于image.xscale。 我认为我们现在可能忽略的轻微并发症是,不应该允许在图像的上下文之外存在一个点,因为它并不意味着任何与图像属性相关的点,如比例。 我希望这更清楚,通常更有用。谢谢。
我想要一个开放的图像。图像应该是一个对象,因为有很多方法与它相关联。读取标题信息并为对象提供许多属性,如title,sizex,sizey ......
然后图像由点组成,显然=所以我认为我有一个分数类。然后我可以定义一个Point对象,它可以有属性,比如position(取决于图像头中的一些像素间距常量)。这个类会有很多点法,比如距离,变化值,移动,比例,两点之间的polt等等。
我的问题是双重的。点对象的创建应该真正取决于图像对象的存在。我不知道python如何处理这种有条件的对象创建。第二,点对象必须知道它与之相关的图像对象。理想情况下,我会有Image.Point(x,y),这意味着点x,y存在于图像中,因此它可以访问初始化图像对象时创建的所有变量。我希望所有这些都有道理。我试过超级,但它似乎没有做条件位,它在基类中运行一个方法,我真的只想让一些变量可用。
感谢您的帮助。
答案 0 :(得分:1)
你可以这样做:
class Point(object):
def __init__(self, image):
self._image = image
class Image(object):
def __init__(self, width, height):
self._points = [Point(self) for unused in range(width * height)]
这样,每个点在初始化时都需要一个图像,每个图像都有一个与之关联的点列表。请注意,由于您要创建大量Point
- 个实例,这可能会占用大量内存,因此您应该考虑将slots用于Point
。
答案 1 :(得分:1)
所以你希望图像有一个返回该图像(点工厂)中的点的方法,如:
class Image:
#...
def point_at(self, x,y):
return PointInImage(self, ...)
#...
class PointInImage:
#...
def __init__(self, image, ...):
self.image = image
#...
#...