Rumah >pembangunan bahagian belakang >Tutorial Python >Adakah Kaedah 'Peribadi' Python Benar-benar Peribadi?

Adakah Kaedah 'Peribadi' Python Benar-benar Peribadi?

Barbara Streisand
Barbara Streisandasal
2024-12-02 22:33:11457semak imbas

Are Python's

Mengapa Kaedah 'Peribadi' Python Bukan Sebenarnya Peribadi

Walaupun awalan garis bawah berganda yang biasa digunakan untuk menandakan kaedah 'peribadi' dalam Python, kaedah ini kekal boleh diakses oleh pengguna melalui konvensyen penamaan yang sedikit berbeza.

Jurubahasa Python menamakan semula ini kaedah 'peribadi' kepada "_ClassName__MethodName". Oleh itu, kaedah yang dikatakan 'peribadi' "__myPrivateMethod()" boleh digunakan sebagai "_MyClass__myPrivateMethod()".

Perubahan nama ini tidak bertujuan sebagai satu bentuk pengkapsulan atau untuk menghalang akses luar. Sebaliknya, ia berfungsi untuk memastikan subkelas tidak secara tidak sengaja menimpa kaedah 'peribadi' kelas super mereka.

Pertimbangkan contoh berikut:

class Foo(object):
    def __init__(self):
        self.__baz = 42
    def foo(self):
        print(self.__baz)
    
class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()
        self.__baz = 21
    def bar(self):
        print(self.__baz)

Apabila kami mencipta instance Bar dan panggil kedua-dua foo() dan bar(), kita melihat output berikut:

x = Bar()
x.foo()
42
x.bar()
21

Seperti yang dibuktikan oleh output, subkelas berjaya mengatasi nilai __baz tanpa menjejaskan atribut 'peribadi' superclass. Selain itu, mengakses x.__dict__ mendedahkan bahawa kedua-dua versi atribut __baz wujud bersama dalam contoh subkelas.

Walaupun perebutan nama ini boleh menghalang penggantian yang tidak disengajakan, ia tidak menghalang akses yang disengajakan kepada kaedah 'peribadi' daripada sumber luaran. Akibatnya, kaedah 'peribadi' Python tidak benar-benar peribadi dan tidak boleh dipercayai untuk enkapsulasi.

Atas ialah kandungan terperinci Adakah Kaedah 'Peribadi' Python Benar-benar Peribadi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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