Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Python 3 Menyenaraikan Pemahaman Tidak Boleh Mengakses Terus Pembolehubah Kelas?
Dalam Python 3, pemahaman senarai tidak boleh mengakses pembolehubah kelas secara langsung yang ditakrifkan dalam definisi kelas, kerana ia beroperasi dalam skop bersarangnya sendiri. Tingkah laku ini berbeza daripada Python 2, di mana akses sedemikian mungkin.
Kod berikut menunjukkan isu dalam Python 3:
class Foo: x = 5 y = [x for i in range(1)]
Kod ini akan menimbulkan NameError untuk x, kerana kefahaman senarai tidak boleh mengakses pembolehubah kelas.
Senarai, set dan pemahaman kamus, serta ungkapan penjana, beroperasi dalam skop bersarang yang tidak diwarisi daripada skop kelas. Ini kerana pemahaman tersebut dilaksanakan sebagai fungsi dan dijalankan dalam skop yang berasingan.
Walaupun terdapat sekatan, terdapat penyelesaian untuk mengakses pembolehubah kelas daripada pemahaman:
Buat skop khusus dalam definisi kelas untuk memegang pembolehubah yang diperlukan oleh pemahaman:
class Foo: x = 5 def __init__(self): y = [self.x for i in range(1)]
Gunakan pembolehubah contoh sebaliknya, dengan memulakannya dalam pembina:
class Foo: def __init__(self): self.x = 5 self.y = [self.x for i in range(1)]
Jika boleh, alihkan pembolehubah dan logik di luar definisi kelas dan gunakan skop global:
x = 5 class Foo: y = [x for i in range(1)]
Semasa mengakses pembolehubah kelas secara terus dalam pemahaman tidak mungkin, terdapat pengecualian untuk yang boleh lelar paling luar. Ungkapan yang menentukan paling luar boleh lelar boleh mengakses pembolehubah kelas:
class Foo: x = 5 y = [i for i in range(x)]
Atas ialah kandungan terperinci Mengapa Python 3 Menyenaraikan Pemahaman Tidak Boleh Mengakses Terus Pembolehubah Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!