Python, hubungan antar kelas dan ketergantungan objek

Sunting

Permintaan maaf atas keumuman sebelumnya!

Saya dengan ini mencoba untuk menjadi lebih jelas. Saya sedang menguji sebuah gambar, jadi saya menulis sejumlah metode yang akan dijalankan untuk menganalisis gambar tersebut. Tidak semua gambar yang diuji akan sama, jadi saya menginginkan objek untuk setiap gambar. Banyak metode yang saya tulis tidak berjalan di seluruh gambar. Misalnya, saya memiliki metode yang mengembalikan jarak titik array dari pusat gambar, menggunakan konstanta jarak piksel yang merupakan atribut gambar. Di sini saya punya contoh, saya membaca gambar dan dengan demikian membuat objek gambar, dan beberapa atribut yang akan berguna bagi saya. Tapi objek titik saya, yang termasuk dalam gambar itu, tidak akan memiliki akses ke atribut tersebut jika mereka memiliki kelasnya sendiri; Hal ini berguna untuk memiliki kelas poin, karena analisis lain juga menggunakan poin, dan menggunakan metode yang sama.

    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.

Jadi pertanyaannya adalah... bagaimana cara memberikan atribut objek titik seperti jarak yang bergantung pada atribut gambar seperti xscale dan yscale. Dalam pikiran saya, saya ingin image.point.x diizinkan, di mana image.point.x bergantung pada image.xscale. Kerumitan kecilnya, yang menurut saya mungkin dapat kita abaikan untuk saat ini, adalah bahwa suatu titik tidak boleh ada di luar konteks suatu gambar, karena tidak ada gunanya memiliki suatu titik tanpa atribut gambar, seperti skala. Saya harap ini lebih jelas, dan secara umum lebih bermanfaat. Terima kasih.

Pertanyaan asli.

Saya ingin memiliki gambar terbuka. Gambar harus berupa objek, karena banyak metode yang dikaitkan dengannya.. mis. membaca info header dan memberi objek banyak atribut seperti title, sizex, sizey...

Kemudian gambarnya terdiri dari titik-titik, tentunya = jadi saya pikir saya akan memiliki kelas poin. Saya kemudian dapat mendefinisikan objek Titik, dan objek tersebut dapat memiliki atribut, seperti posisi (tergantung pada beberapa konstanta jarak piksel dari header gambar). Dan kelas ini akan memiliki banyak metode titik, seperti jarak, perubahan nilai, perpindahan, skala, titik antara dua titik.... dll

Masalah saya ada dua. Pembuatan objek titik harus benar-benar bergantung pada keberadaan objek gambar tersebut. Saya tidak tahu bagaimana python menangani pembuatan objek bersyarat semacam ini. Dan kedua, Objek titik harus menyadari objek gambar yang relevan dengannya. Idealnya, saya akan memiliki Image.Point(x,y) dan itu berarti bahwa titik x,y ada di dalam gambar, sehingga dapat memiliki akses ke semua varialbe yang dibuat saat objek gambar diinisialisasi. Saya harap semua itu masuk akal. Saya telah mencoba super, tetapi sepertinya tidak melakukan sedikit persyaratan, dan menjalankan metode di kelas dasar, di mana saya benar-benar hanya ingin beberapa variabel tersedia.

Terima kasih atas bantuannya.


person Andrew    schedule 02.07.2011    source sumber
comment
Pembuatan objek titik harus benar-benar bergantung pada keberadaan objek gambar tersebut. Saya tidak tahu bagaimana python menangani pembuatan objek bersyarat semacam ini. Objek sedang dibuat ketika Anda meminta Python untuk melakukannya. Tidak ada pembuatan otomatis atau apa pun, Anda akan meminta objek Image membuat objek Point sendiri saat inisialisasi. Apakah Anda yakin Anda memerlukan kelas poin? Bagaimana dengan: (x, y) untuk mewakili suatu titik?   -  person phant0m    schedule 02.07.2011
comment
@Andrew - Jelas bahwa Anda memiliki masalah yang telah Anda pikirkan selama beberapa waktu, tetapi tidak jelas apa yang Anda tanyakan. Bisakah Anda memposting beberapa kode (atau kode semu) untuk mengilustrasikan dengan lebih baik apa yang Anda tanyakan? Saya melihat beberapa orang memilih untuk menutup pertanyaan Anda. Jika ini terjadi, jangan ragu untuk memposting yang baru dengan penjelasan masalahnya lebih detail! :)   -  person mac    schedule 02.07.2011
comment
@mac - Terima kasih, saya telah mencoba memperbaiki pertanyaan.   -  person Andrew    schedule 02.07.2011
comment
@phant0m - Jika saya memberitahu python untuk membuat objek titik, ia akan melakukannya tergantung pada aturan dalam kelas titik. Pada kenyataannya titik itu hanya ada dalam konteks gambaran tertentu. Mungkin itu adalah lokasi mata, yang diperoleh dari metode pengenalan wajah; poin itu hanya relevan dengan satu foto itu. Jika saya tidak memiliki kelas poin, saya mungkin akan mengulangi metode di berbagai kelas. def distance(point1,point2) misalnya berguna dalam analisis foto dan analisis slide mikroskop - tetapi saya tidak ingin membaca kedua gambar tersebut dengan kelas yang sama.   -  person Andrew    schedule 02.07.2011


Jawaban (2)


jadi Anda ingin gambar memiliki metode yang mengembalikan titik pada gambar tersebut (pabrik titik) seperti:

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

class PointInImage:
    #...
    def __init__(self, image, ...):
        self.image = image
        #...
    #...
person Dan D.    schedule 02.07.2011
comment
D, Terima kasih untuk ini. mengembalikan instruksi untuk membuat objek dari kelas yang berbeda tampaknya merupakan hal baru bagi saya. Di sinilah saya menunjukkan bahwa dua minggu lalu saya belum pernah melakukan pemrograman OO apa pun. Terima kasih semuanya. - person Andrew; 02.07.2011

Anda bisa melakukannya seperti ini:

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)]

Dengan cara ini, setiap titik memerlukan gambar pada inisialisasi, dan setiap gambar memiliki daftar titik yang terkait dengannya. Perhatikan bahwa, karena Anda akan membuat banyak Point-instance, yang bisa sangat memakan memori, Anda harus mempertimbangkan untuk menggunakan slot untuk Point.

person Björn Pollex    schedule 02.07.2011
comment
Terima kasih, Untuk setiap gambar, mungkin ada 8 hingga 12 poin yang saya minati. Rasanya konyol bagi saya untuk mencantumkan semua poin padahal hanya sedikit yang berguna. Namun saya perlu menjalankan metode yang cukup rumit pada beberapa poin tersebut, jadi masuk akal bagi saya, untuk memiliki kelas poin. - person Andrew; 02.07.2011