Les objets de classe prennent en charge deux types d'opérations: les références d'attribut et l'instanciation
Les références d'attribut utilisent la syntaxe standard utilisée pour toutes les références d'attribut dans Python: obj.name. Les noms d'attribut valides sont tous les noms qui se trouvaient dans l'espace de noms de la classe lorsque l'objet de classe a été créé. Donc, si la définition de classe ressemblait à ceci:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
alors MyClass.i
et MyClass.f
sont des références d'attribut valides, renvoyant respectivement un entier et un objet fonction. Les attributs de classe peuvent également être affectés à, vous pouvez donc modifier la valeur de MyClass.i
par affectation. __doc__
est également un attribut valide, renvoyant la docstring appartenant à la classe: "Un exemple de classe simple".
L'instanciation de classe utilise la notation de fonction. Imaginez simplement que l'objet classe est une fonction sans paramètre qui renvoie une nouvelle instance de la classe. Par exemple:
x = MyClass()
L' opération d' instanciation («appeler» un objet de classe) crée un objet vide. De nombreuses classes aiment créer des objets avec des instances personnalisées à un état initial spécifique. Par conséquent, une classe peut définir une méthode spéciale nommée __init__()
, comme ceci:
def __init__(self):
self.data = []
Lorsqu'une classe définit une __init__()
méthode, l'instanciation de classe appelle automatiquement __init__()
pour l'instance de classe nouvellement créée. Ainsi, dans cet exemple, une nouvelle instance initialisée peut être obtenue par:
x = MyClass()
Bien sûr, la __init__()
méthode peut avoir des arguments pour une plus grande flexibilité. Dans ce cas, les arguments donnés à l'opérateur d'instanciation de classe sont transmis à __init__()
. Par exemple,
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
x.r, x.i
Tiré de la documentation officielle qui m'a le plus aidé au final.
Voici mon exemple
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 :)")
Lorsque vous créez une instance de classe Bill:
purchase = Bill(5,6,7)
Vous obtenez:
> Buy 5 apples 6 figs and 7 dates. Total fruitty bill is 18 pieces of
> fruit :)
x = 'Hello'
dehors init mais à l'intérieur de la classe? est-ce comme java où c'est pareil, ou devient-il comme une variable statique qui n'est initialisée qu'une seule fois?