Semua penjelasan dapat ditemukan di Dokumentasi Python Tutorial Python
Untuk kesalahan pertama Anda <type 'exceptions.NameError'>: name 'outer_var' is not defined
. Penjelasannya adalah:
Tidak ada singkatan untuk mereferensikan atribut data (atau metode lain!) Dari dalam metode. Saya menemukan bahwa ini benar-benar meningkatkan keterbacaan metode: tidak ada kemungkinan membingungkan variabel lokal dan variabel instan saat melihat sekilas melalui suatu metode.
dikutip dari The Python Tutorial 9.4
Untuk kesalahan kedua Anda <type 'exceptions.NameError'>: name 'OuterClass' is not defined
Ketika definisi kelas dibiarkan normal (melalui akhir), objek kelas dibuat.
dikutip dari Tutorial Python 9.3.1
Jadi ketika Anda mencoba inner_var = Outerclass.outer_var
, Quterclass
itu belum dibuat, itu sebabnyaname 'OuterClass' is not defined
Penjelasan yang lebih rinci tapi membosankan untuk kesalahan pertama Anda:
Meskipun kelas memiliki akses ke cakupan fungsi yang melingkupi, mereka tidak bertindak sebagai cakupan yang melingkupi kode yang disarangkan di dalam kelas: Python mencari fungsi yang melingkupi nama yang direferensikan, tetapi tidak pernah ada kelas yang melingkupinya. Artinya, kelas adalah cakupan lokal dan memiliki akses ke cakupan lokal yang melingkupi, tetapi tidak berfungsi sebagai cakupan lokal yang melingkupi kode bersarang lebih lanjut.
dikutip dari Learning.Python (5th) .Mark.Lutz