Bagaimana untuk melaksanakan kelas bersarang dalam Python

WBOY
Lepaskan: 2023-05-13 08:43:05
ke hadapan
1873 orang telah melayarinya

S: Bolehkah kelas ditulis dalam kelas Python

J: Ya, kelas dalam Python boleh mengandungi kelas lain dipanggil kelas bersarang atau jenis bersarang. Sintaks untuk menentukan kelas bersarang dalam kelas adalah sama seperti untuk menentukan kelas dalam modul. Sebagai contoh, berikut ialah contoh yang mengandungi kelas bersarang:

class OuterClass:
    def __init__(self):
        self.inner = self.InnerClass()

    class InnerClass:
        def __init__(self):
            self.inner_var = 42

outer = OuterClass()
print(outer.inner.inner_var) # 输出:42
Salin selepas log masuk

Dalam contoh ini, OuterClass mengandungi kelas InnerClass bersarang dan instance InnerClass dimulakan dalam pembina OuterClass. Pembolehubah ahli inner_var dalam InnerClass boleh diakses dengan mengakses outer.inner.inner_var.

Perlu diambil perhatian bahawa tiada sekatan akses khas antara kelas bersarang dan kelas luaran mereka boleh mengakses pembolehubah ahli dan kaedah masing-masing. Selain itu, kelas bersarang juga boleh menjadi statik atau dinamik (iaitu ia boleh mengandungi kaedah contoh atau tidak).

S: Bagaimanakah InnerClass mengakses pembolehubah ahli kelas luaran

J: Dalam Python, kelas bersarang boleh mengakses pembolehubah ahli kelas luaran melalui nama pembolehubah nama kelas luaran. Sebagai contoh, dalam contoh sebelumnya, jika anda mahu InnerClass mengakses pembolehubah ahli outer_var OuterClass, anda boleh mengubah suai kod seperti berikut:

class OuterClass:
    def __init__(self):
        self.outer_var = 100
        self.inner = self.InnerClass()

    class InnerClass:
        def __init__(self):
            outer_var = OuterClass.outer_var
            print(outer_var)

outer = OuterClass() # 输出:100
Salin selepas log masuk

Dalam contoh ini, pembina InnerClass lulus OuterClass.outer_var Kaedah mengakses pembolehubah ahli outer_var dalam OuterClass. Perlu diingatkan bahawa apabila mengakses pembolehubah ahli kelas luar, anda perlu menggunakan nama kelas luar, bukan diri, kerana kelas bersarang dan kelas luar adalah dua kelas berbeza.

S: Contohnya, jika A bersarang B, bagaimana untuk mencipta objek B baharu dalam fungsi B

A: Jika kelas B ditakrifkan dalam kelas A, maka dalam Mencipta B baharu? objek dalam fungsi B boleh dicapai dengan cara berikut:

class A:
    class B:
        def __init__(self, val):
            self.val = val

        def create_new_b(self, val):
            new_b = A.B(val)
            return new_b

a = A()
b = a.B(1)
new_b = b.create_new_b(2)
print(b.val)  # 输出 1
print(new_b.val)  # 输出 2
Salin selepas log masuk

Dalam contoh ini, A mengandungi kelas B bersarang, dan init pembina B menerima val parameter. Kelas B juga mengandungi kaedah bernama create_new_b, yang menerima parameter val dan mencipta objek kelas B baharu menggunakan A.B(val). Kaedah create_new_b mengembalikan objek B yang baru dibuat. Objek kelas B baharu boleh dibuat dengan memanggil kaedah b.create_new_b(2), dengan b ialah tika kelas B dalam objek kelas A.

Perlu diambil perhatian bahawa apabila mencipta objek kelas B, anda perlu menggunakan A.B dan bukannya B. Ini kerana B bersarang dalam A, bukan dalam ruang nama global.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan kelas bersarang dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan