Rumah >pembangunan bahagian belakang >Tutorial Python >Adakah Kaedah 'Peribadi' Python Benar-benar Peribadi?
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!