Los objetos de clase admiten dos tipos de operaciones: referencias de atributos e instanciación
Las referencias de atributos utilizan la sintaxis estándar utilizada para todas las referencias de atributos en Python: obj.name. Los nombres de atributo válidos son todos los nombres que estaban en el espacio de nombres de la clase cuando se creó el objeto de clase. Entonces, si la definición de clase se ve así:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
entonces MyClass.i
y MyClass.f
son referencias de atributo válidas, que devuelven un entero y un objeto de función, respectivamente. Los atributos de clase también se pueden asignar a, por lo que puede cambiar el valor de MyClass.i
por asignación. __doc__
también es un atributo válido, que devuelve la cadena de documentación perteneciente a la clase: "Una clase de ejemplo simple".
La instanciación de clase utiliza la notación de función. Simplemente imagine que el objeto de clase es una función sin parámetros que devuelve una nueva instancia de la clase. Por ejemplo:
x = MyClass()
La operación de instanciación ("llamar" a un objeto de clase) crea un objeto vacío. A muchas clases les gusta crear objetos con instancias personalizadas para un estado inicial específico. Por lo tanto, una clase puede definir un método especial llamado __init__()
, como este:
def __init__(self):
self.data = []
Cuando una clase define un __init__()
método, la instanciación de clase se invoca automáticamente __init__()
para la instancia de clase recién creada. Entonces, en este ejemplo, se puede obtener una nueva instancia inicializada:
x = MyClass()
Por supuesto, el __init__()
método puede tener argumentos para una mayor flexibilidad. En ese caso, los argumentos dados al operador de instanciación de clase se pasan a __init__()
. Por ejemplo,
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
x.r, x.i
Tomado de la documentación oficial que más me ayudó al final.
Aqui esta mi ejemplo
class Bill():
def __init__(self,apples,figs,dates):
self.apples = apples
self.figs = figs
self.dates = dates
self.bill = apples + figs + dates
print ("Buy",self.apples,"apples", self.figs,"figs
and",self.dates,"dates.
Total fruitty bill is",self.bill," pieces of fruit :)")
Cuando crea una instancia de clase Bill:
purchase = Bill(5,6,7)
Usted obtiene:
> Buy 5 apples 6 figs and 7 dates. Total fruitty bill is 18 pieces of
> fruit :)
x = 'Hello'
fuera de init pero dentro de la clase? ¿Es como Java donde es lo mismo, o se convierte en una variable estática que solo se inicializa una vez?