Wiem, że atrybuty klasy, które są deklarowane przez prefiks podwójnego podkreślenia __
, mogą lub nie mogą być widoczne poza definicją klasy. Ponieważ nadal możemy uzyskać dostęp do tych atrybutów przez object._className__attrName
.Ukrywanie danych w języku Python Klasa
class A:
def __init__(self):
self.a = 1
self.b = 2
----
----
self.z = 26
self.catch = 100
teraz, aby zabezpieczyć wszystkie atrybuty oprócz atrybutu catch
, muszę zadeklarować je z podwójnym podkreśleniem co jest dość niechlujny. Czy jest jakiś sposób, aby powiedzieć w mojej definicji klasy, że tylko self.catch
może być dostępny poza klasą?
Przeprosiny, jeśli odpowiedź zostanie udzielona w innym miejscu lub omówiona wcześniej.
Nie. Jednakże, jeśli nie jesteś naprawdę paranoikiem, fakt, że ktoś * może * uzyskać dostęp do obiektu za pomocą 'object._className__attrName' nie jest wielkim problemem. Naprawdę po prostu chcesz zapobiec przypadkowemu dostępowi do zmiennych, których nie powinni używać podczas używania twojego kodu. Obfuskacja osiąga ten cel. – Chris
możliwy duplikat [Czy python ma zmienne "prywatne" w klasach?] (Http://stackoverflow.com/questions/1641219/does-python-have-private-variables-in-classes) –
@ BjörnPollex, this isn ' o co on prosi. On chce potrzeby jawnego "publicznego" operatora ", a nie odwrotnie. –