Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Saya Tidak Boleh Mengakses Pembolehubah Kelas Secara Terus dalam Pemahaman Senarai Dalam Definisi Kelas dalam Python?

Mengapa Saya Tidak Boleh Mengakses Pembolehubah Kelas Secara Terus dalam Pemahaman Senarai Dalam Definisi Kelas dalam Python?

Patricia Arquette
Lepaskan: 2024-12-26 22:26:17
asal
289 orang telah melayarinya

Why Can't I Access Class Variables Directly in List Comprehensions Within a Class Definition in Python?

Mengakses Pembolehubah Kelas daripada Pemahaman Senarai dalam Definisi Kelas

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.

Penyelesaian

Untuk mengakses pembolehubah kelas dalam pemahaman senarai dalam definisi kelas, anda boleh menggunakan salah satu daripada penyelesaian berikut:

  • Gunakan fungsi eksplisit: Takrifkan fungsi dalam kelas yang mengambil pembolehubah kelas sebagai hujah. Pemahaman senarai kemudiannya boleh menggunakan pembolehubah yang dihantar kepada fungsi.
  • Gunakan __init__ untuk mencipta pembolehubah tika: Cipta pembolehubah tika dalam pembina kelas (__init__). Pembolehubah contoh kemudiannya boleh diakses dalam pemahaman senarai.

Contoh

Pertimbangkan contoh berikut:

class Foo:
    x = 5

    # Error in Python 3: 'NameError: name 'x' is not defined'
    y = [x for i in range(1)]
Salin selepas log masuk

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)
Salin selepas log masuk

Menggunakan __init__ untuk mencipta pembolehubah contoh:

def __init__(self):
    self.y = [self.x for i in range(1)]
Salin selepas log masuk

Pertimbangan Lain

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan