Walaupun pembolehubah kelas boleh diakses dalam pemahaman senarai dalam definisi fungsi, ia tidak boleh diakses dalam pemahaman senarai dalam definisi kelas . Percanggahan ini berpunca daripada fakta bahawa skop kelas tidak meluas kepada pemahaman senarai atau skop tertutup lain seperti ungkapan penjana atau definisi fungsi.
Sebaliknya, pemahaman senarai dan ungkapan lain yang sedemikian mempunyai skop setempatnya sendiri, menghalangnya daripada mengakses pembolehubah yang ditakrifkan dalam melampirkan skop kelas. Tingkah laku ini konsisten merentas semua versi Python.
Untuk mengakses pembolehubah kelas dalam pemahaman senarai dalam definisi kelas, anda boleh menggunakan salah satu daripada penyelesaian berikut:
Pertimbangkan contoh berikut:
class Foo: x = 5 # Error in Python 3: 'NameError: name 'x' is not defined' y = [x for i in range(1)]
Untuk menggunakan pembolehubah kelas x dalam contoh ini , anda boleh menggunakan salah satu daripada penyelesaian berikut:
Menggunakan yang eksplisit fungsi:
def get_y(x): return [x for i in range(1)] y = get_y(x)
Menggunakan __init__ untuk mencipta pembolehubah contoh:
def __init__(self): self.y = [self.x for i in range(1)]
Walaupun penyelesaian yang dinyatakan di atas, ia biasanya disyorkan untuk mengelak daripada mengakses pembolehubah kelas daripada pemahaman senarai dalam definisi kelas. Amalan ini boleh membawa kepada kekeliruan dan kemungkinan ralat, terutamanya apabila bekerjasama dengan pembangun lain.
Untuk pendekatan yang lebih bersih dan boleh diselenggara, pertimbangkan untuk menggunakan fungsi atau pembolehubah contoh dan bukannya senarai pemahaman untuk mengakses pembolehubah kelas dalam definisi kelas.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Mengakses Pembolehubah Kelas Secara Terus dalam Pemahaman Senarai Dalam Definisi Kelas dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!