Objetos de classe suportam dois tipos de operações: referências de atributo e instanciação
As referências de atributo usam a sintaxe padrão usada para todas as referências de atributo em Python: obj.name. Nomes de atributos válidos são todos os nomes que estavam no espaço de nomes da classe quando o objeto da classe foi criado. Portanto, se a definição de classe fosse assim:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
em seguida, MyClass.i
e MyClass.f
são referências a atributos válidos, retornando um número inteiro e um objeto de função, respectivamente. Os atributos de classe também podem ser atribuídos, para que você possa alterar o valor MyClass.i
por atribuição. __doc__
também é um atributo válido, retornando a docstring pertencente à classe: "A simple example class".
A instanciação de classe usa notação de função. Apenas finja que o objeto de classe é uma função sem parâmetros que retorna uma nova instância da classe. Por exemplo:
x = MyClass()
A operação de instanciação ("chamando" um objeto de classe) cria um objeto vazio. Muitas classes gostam de criar objetos com instâncias personalizadas para um estado inicial específico. Portanto, uma classe pode definir um método especial chamado __init__()
, assim:
def __init__(self):
self.data = []
Quando uma classe define um __init__()
método, a instanciação de classe invoca automaticamente a instância de classe __init__()
recém-criada. Portanto, neste exemplo, uma nova instância inicializada pode ser obtida por:
x = MyClass()
Obviamente, o __init__()
método pode ter argumentos para maior flexibilidade. Nesse caso, os argumentos fornecidos ao operador de instanciação de classe são transmitidos para __init__()
. Por exemplo,
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
x.r, x.i
Retirado da documentação oficial que mais me ajudou no final.
Aqui está o meu exemplo
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 :)")
Quando você cria uma instância da classe Bill:
purchase = Bill(5,6,7)
Você obtém:
> Buy 5 apples 6 figs and 7 dates. Total fruitty bill is 18 pieces of
> fruit :)
x = 'Hello'
fora do init, mas dentro da classe? é como java onde é o mesmo ou se torna uma variável estática que é inicializada apenas uma vez?