Je viens d'un milieu MATLAB. Lorsque je crée des définitions de classe, je peux instancier des noms de variables «vides», puis leur attribuer ultérieurement des valeurs ou des objets. C'est à dire.


classdef myclass < handle

    properties
        var1
        var2
    end 
end

a = myClass;
a.var1 = someOtherClassObject;

Comment faire cela en Python? J'ai essayé quelque chose comme ça:

class myClass:
def __init__(self):
    var1 
    var2

a = myClass()
a.var1 = someOtherClassObject()

Mais ce n'est pas correct. Le but principal est de construire une définition de ma classe, comme une structure, et ensuite d'aller instancier les variables selon les besoins.

Et l'aide serait appréciée.

7
userJohn 17 juil. 2015 à 04:35

2 réponses

Meilleure réponse

Vous devez utiliser self. pour créer des variables pour les instances (objets)

Je ne pense pas que vous puissiez avoir un nom non initialisé en python, pourquoi ne pas simplement initialiser vos variables d'instance sur None? Exemple -

class myClass:
    def __init__(self):
        self.var1 = None 
        self.var2 = None

Vous pouvez plus tard aller les régler sur ce que vous voulez en utilisant -

a = myClass()
a.var1 = someOtherClassObject

Si vous avez besoin de définir des variables de classe (qui sont partagées entre les instances), vous devez les définir en dehors de la méthode __init__(), directement à l'intérieur de la classe comme -

class myClass:
    var1 = None
    var2 = None
    def __init__(self):
        pass
15
Anand S Kumar 17 juil. 2015 à 02:57

Il n'y a pas de "variables non initialisées" en Python comme vous l'avez dans MATLAB, car elles ne sont pas nécessaires. Si vous souhaitez ajouter des variables à une instance de classe plus tard, ajoutez-les simplement:

>>> class myclass:
>>>     pass
>>> 
>>> a = myclass()
>>> a.var1 = 5
>>> a.var1
5

Vous pouvez également les ajouter directement à la classe, afin qu'ils apparaissent dans toutes les instances de la classe. Cela les ajoute également aux instances de la classe créée précédemment, donc cela peut être dangereux si vous ne faites pas attention:

>>> class myclass:
>>>     pass
>>> 
>>> a = myclass()
>>> a.var1
AttributeError: 'myclass' object has no attribute 'var1'
>>>
>>> myclass.var1 = 5
>>> a.var1
5

Vous ne voulez pas faire cela dans MATLAB car vous devez d'abord utiliser addprop pour l'ajouter, ce qui est inutilement compliqué. Python est un langage plus dynamique que MATLAB dans de nombreux cas. Plutôt que d'initialiser quelque chose, puis de le faire, en Python, vous le faites simplement.

Techniquement, ce ne sont pas des "variables", en Python elles sont appelées "attributs" et en MATLAB elles sont appelées "propriétés" (Python a quelque chose qui s'appelle propriétés, mais elles ne sont pas les mêmes que les propriétés dans MATLAB).

0
TheBlackCat 17 juil. 2015 à 08:49