In Python, non ci sono modificatori di accesso. La convenzione deve prefigurare con un trattino di sottolineatura i metodi e le variabili a cui non è previsto l'accesso dall'esterno della classe. Tecnicamente ti impedisce di accedere a questo campo da una classe di terze parti? Affatto; ma se lo fai, sei da solo e rischi di rompere qualcosa, senza essere in grado di incolpare l'altra classe.
In C #, esistono modificatori di accesso, ma sono ancora solo una convenzione, che è imposta da un compilatore, ma è comunque una convenzione. Ciò significa che tecnicamente, si può ancora accedere e modificare variabili private, tramite Reflection o manomettendo direttamente la memoria (come game trainer fare). La conseguenza è esattamente la stessa: se le variabili della tua classe vengono modificate tramite Reflection da un'altra classe, o attraverso la manomissione della memoria da parte di un'altra applicazione, e interrompe qualcosa nella tua classe, non è colpa tua.
Si noti che questo, ovviamente, crea problemi di sicurezza quando una terza parte può accedere ai tuoi dati; qualcosa che porta a varianti crittografate di una stringa e strutture di dati simili. Tuttavia, la protezione del codice da tale utilizzo è più simile a OS e restrizioni di accesso a livello di codice e non ha nulla a che fare con Reflection di per sé.