IPython tidak mengenali perubahan pada definisi kelas

IPython tampaknya tidak mengenali perubahan yang dilakukan pada definisi kelas setelah skrip dijalankan pertama kali. Perubahan pada fungsi yang berdiri sendiri berfungsi dengan baik, hanya saja tidak terjadi perubahan pada fungsi kelas. Satu-satunya cara agar ini berfungsi adalah dengan memaksa %reset. Apakah saya menjadi gila atau apakah ini benar-benar berfungsi seperti ini (tidak memperbarui perubahan pada kelas dalam skrip)? Apakah ada solusinya? Saya telah mencoba autoreload:

%load_ext muat ulang otomatis

%muat ulang otomatis 2

tapi itu tidak berhasil.


person James    schedule 28.02.2017    source sumber
comment
Apakah Anda yakin Anda menginisialisasi ulang instance kelas? IPython harus menangkap perubahan dalam definisi kelas, tetapi tidak akan memperbarui instance yang ada.   -  person alexey    schedule 28.02.2017
comment
Tidak, saya belum menginisialisasi ulang instance. Jika Anda tidak dapat menebak dari pertanyaan awal saya maka Anda mungkin sudah menyimpulkan sekarang bahwa saya adalah pemula dalam hal ini (mengikuti kursus edX). Pertanyaan saya selanjutnya adalah, bagaimana cara menginisialisasi ulang instance? Panggil saja mereka dengan kumpulan variabel awal lagi?   -  person James    schedule 02.03.2017
comment
Wow. Jadi saya baru mengetahuinya berdasarkan panduan alexey, saya dapat memiliki dua instance kelas yang berbeda dengan dua set kode/instruksi/atribut yang berbeda!? Saya dapat memanggil satu instance, mengubah kode, memanggil instance lainnya, dan masing-masing memiliki properti/metodenya sendiri. Jadi entah bagaimana seluruh kumpulan kode kelas dipertahankan oleh setiap instance? Satu sebelum perubahan, dan satu lagi setelahnya?‹br›Maafkan saya karena naif, namun saya berpikir bahwa metode dll. akan disimpan hanya dalam satu repositori pusat (yaitu yang sekarang) daripada dua atau lebih repositori yang berbeda .‹br›   -  person James    schedule 02.03.2017
comment
Apakah setiap instance mempertahankan kumpulan kodenya masing-masing, bahkan dua instance yang dibuat dengan versi kode yang sama? Atau apakah pemahaman saya tentang apa yang terjadi di sini benar-benar melenceng?   -  person James    schedule 02.03.2017
comment
Di python semuanya adalah sebuah objek. Jadi ketika Anda membuat kelas baru, objeknya ditempatkan di suatu tempat di memori dan tautannya disimpan dalam lingkup saat ini. Saat Anda membuat instance baru, referensi ke kelasnya disimpan dalam atribut __class__. Tidak mempermasalahkan nama kelas, hanya referensi. Jika Anda membuat kelas baru, kelas tersebut memperoleh lokasi baru di memori dan menimpa definisi sebelumnya dalam cakupan. Setiap instance baru akan dikaitkan dengan definisi kelas baru. Namun yang sebelumnya akan tetap tersedia dengan tautan langsung.   -  person alexey    schedule 02.03.2017
comment
Definisi kelas disimpan satu kali, dan setiap instance menyimpan referensi ke kelas tersebut, yang secara efektif merupakan referensi ke lokasi penyimpanan definisi? Jika Anda memiliki tiga instance kelas (tanpa mengubah definisi), masing-masing hanya referensi mereka sendiri ke lokasi __class__ yang sama (seperti a=2, b=a, c=b semuanya referensi ke lokasi memori yang sama) ?   -  person James    schedule 04.03.2017


Jawaban (1)


Saran Alexei menunjuk pada jawabannya, variabel yang ditetapkan ke suatu kelas harus ditetapkan ulang atau diinisialisasi ulang setelah mengubah definisi kelas, jika tidak, variabel tersebut akan terus mempertahankan properti dan metode kelas dari sebelum perubahan.

person James    schedule 29.05.2017