Python, межклассовые отношения и объектные зависимости - PullRequest
0 голосов
/ 02 июля 2011

Редактировать

Извинения за предыдущую общность!

Я стараюсь быть более ясным.Я тестирую изображение, поэтому я должен написать ряд методов, которые будут выполняться для анализа изображения.Не все тестируемые изображения будут одинаковыми, и поэтому я хочу объект для каждого изображения.Многие из методов, которые я должен написать, не работают на всех изображениях.Например, у меня есть метод, который возвращает расстояние точки массива от центра изображения, используя постоянную расстояния между пикселями, которая является атрибутом изображения.Здесь у меня есть пример, я читаю изображение и тем самым создаю изображение объекта и некоторые атрибуты, которые будут мне полезны.Но мои точечные объекты, которые «принадлежат» на этом изображении, не будут иметь доступа к этим атрибутам, если у них есть собственный класс;полезно иметь класс точек, потому что другой анализ также использует точки и использует те же методы.

    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, и он мог бы иметь атрибуты, например, положение (в зависимости от некоторых констант пикселей в заголовке изображения).И у этого класса будет много точечных методов, таких как расстояние, изменение значения, перемещение, масштабирование, опрос между двумя точками ... и т. Д.

Моя проблема двоякая.Создание точечных объектов должно действительно зависеть от наличия объекта изображения.Я не знаю, как python обрабатывает такие условные объекты.И, во-вторых, точечный объект должен знать объект изображения, к которому он относится.В идеале, у меня будет Image.Point (x, y), и это будет означать, что точка x, y существует внутри изображения, и поэтому он может иметь доступ ко всем переменным, созданным при инициализации объекта изображения.Я надеюсь, что все это имеет смысл.Я пробовал super, но он, похоже, не выполняет условный бит, и он запускает метод в базовом классе, где я просто хочу иметь некоторые переменные в наличии.

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 02 июля 2011

, поэтому вы хотите, чтобы у изображения был метод, который возвращает точки на этом изображении (фабрика точек), например:

class Image:
    #...
    def point_at(self, x,y):
        return PointInImage(self, ...)
    #...

class PointInImage:
    #...
    def __init__(self, image, ...):
        self.image = image
        #...
    #...
1 голос
/ 02 июля 2011

Вы можете сделать это так:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...