variable utiliza tipos que imprimir ejemplo declarar declaración datos como asignaciones python scope

utiliza - variables en python 2



Ámbitos variables en las clases de Python (4)

declarar una variable en una clase (fuera de una función): todas las funciones de clase pueden acceder a ella (básicamente una variable pública)

declarar una variable dentro de una función dentro de una clase: solo esa función puede acceder a ella (está en ese ámbito de funciones)

declarar una variable con self. (nombre de variable) dentro de una función dentro de una clase: todas las funciones de clase pueden acceder a ella (¿cómo es esto diferente de global (nombre de variable)?)

y como no hay privacidad / protección, todo es público, de modo que todo lo accesible desde el interior de una clase es accesible desde fuera de la clase.

¿Hay algún otro matiz que deba saber, o simplemente lo tengo?


Aunque respondí, permítame agregar algunos comentarios a sus preguntas:

declarar una variable en una clase (fuera de una función): todas las funciones de clase pueden acceder a ella (básicamente una variable pública): comentario: esto es como una variable estática y se puede llamar usando el nombre de la clase. Estas variables están disponibles para todas las funciones, cualquier función puede modificarlo e imprimirlo.

declarar una variable dentro de una función dentro de una clase: solo esa función puede acceder a ella (está en ese ámbito de funciones): comentario: si la variable se declara sin auto, entonces se puede acceder solo dentro de esa función, una variable local poco. Sin embargo, si declara usar self como self.var = ''somevalue'', entonces se puede acceder a través de cualquier objeto pero no a través del nombre de la clase.

declarar una variable con self. (nombre de la variable) dentro de una función dentro de una clase: todas las funciones de la clase pueden acceder a ella (¿cómo es esto diferente de global (nombre de la variable)?): comment: see asnswer en la parte anterior.

y como no hay privacidad / protección, todo es público, de modo que todo lo accesible desde dentro de una clase es accesible desde fuera de la clase .: comment: sí, pero podemos usar un guión bajo para indicarle al mundo que esta variable es privada pero técnicamente eso no es así hazlo privado.


Declarar una variable en el nivel superior de la clase es como declarar una variable estática o de clase. Calificarlo consigo mismo es declarar una variable de instancia. Las variables de clase se pueden modificar haciendo referencia a ellas por nombre de clase (por ejemplo, Class.x = 5 ) y todas las instancias heredarán estos cambios. Las variables de instancia son privadas para una instancia y solo pueden ser modificadas por esa instancia.

Puede alcanzar cierto nivel de control de acceso usando guiones bajos. Ver variables privadas en el tutorial de Python . Por convención, las variables que comienzan con un guión bajo, por ejemplo _foo son partes no públicas de una API, y los nombres comienzan con dos guiones bajos, por ejemplo, __foo tendrá su nombre mutilado para ser _classname__foo .


Podemos usar el alcance en esto para como: caso 1: en la clase
class test:<br> def __init__(self, a): self.__elements = a<br> def change_a(self): self.__elements = 5

caso 2: clase exterior
t = test(5)

Esto accederá por como object._classname__privatevaribalename

print(t._test__elements)

esto imprimirá el valor de cambio de a`


Dado que la lista en su pregunta no está 100% clara, he decidido explicarlo con un simple ejemplo. También incluye algunas cosas como __something variables que no mencionaste en tu lista.

class Test: a = None b = None def __init__(self, a): print self.a self.a = a self._x = 123 self.__y = 123 b = ''meow''

Al principio, a y b son solo variables definidas para la clase en sí, accesibles a través de Test.a y Test.b y no específicas de ninguna instancia.

Al crear una instancia de esa clase (lo que da como resultado que __init__ esté ejecutando):

  • print self.a no encuentra una variable de instancia y, por lo tanto, devuelve la variable de clase
  • self.a = a : se crea una nueva variable de instancia a . Esto sombrea la variable de clase, por lo que self.a ahora hará referencia a la variable de instancia; para acceder a la variable de clase, ahora debe usar Test.a
  • La asignación a self._x crea una nueva variable de instancia. Se considera que "no forma parte de la API pública" (también conocida como protegida), pero técnicamente no tiene un comportamiento diferente.
  • La asignación a self.__y crea una nueva variable de instancia llamada _Test__y , es decir, su nombre está mutilado, por lo tanto, a menos que use el nombre incorrecto, no se podrá acceder desde fuera de la clase. Esto podría usarse para variables "privadas".
  • La asignación a b crea una variable local. No está disponible desde ningún sitio, excepto la función __init__ , ya que no se guarda en la instancia, clase o alcance global.