Dynamiquement la définition des champs d'instance dans les classes Python

Je suis Python provenant principalement de programmation Java.

Je suis actuellement en train de réfléchir sur la façon dont les classes en Python sont instanciés.

Je comprends que __init__(): c'est comme le constructeur en Java. Cependant, parfois, les classes python n'ont pas de __init__() méthode qui, dans ce cas, je suppose, est un constructeur par défaut tout comme en Java?

Une autre chose qui rend le passage de Java, python légèrement difficile, c'est qu'en Java, vous devez définir tous les champs d'instance de la classe avec le type et parfois une valeur initiale. En python tout cela semble disparaître et les développeurs suffit de définir de nouveaux champs à la volée.

Par exemple je suis tombé sur un programme comme suit:

class A(Command.UICommand):
    FIELDS = [
        Field( 'runTimeStepSummary', BOOL_TYPE)
        ]

    def __init__(self, runTimeStepSummary=False):
        self.runTimeStepSummary = runTimeStepSummary

    """Other methods"""

    def execute(self, cont, result):
        self.timeStepSummaries = {}
        """ other code"""

La chose qui confond (et légèrement irritant pour moi) est que cette classe n'a pas un champ appelé timeStepSummaries encore comment un développeur peut-il, au milieu d'une méthode, il suffit de définir un nouveau champ? ou est ma compréhension incorrecte?

Donc, pour être clair, ma question est en Python peut-on définir dynamiquement de nouveaux champs d'une classe en cours d'exécution, comme dans cet exemple ou est-ce timeStepSummaries variable d'une instance de java comme variable privée?

EDIT: j'utilise python 2.7

Sans doute les méthodes qui semblent être absents sont définies sur la classe parent. Et pythons règles de portée sont très différents à partir de Java. N'importe qui peut déclarer une nouvelle variable ou un champ et il sera créé (dans la plupart des cas). C'est tous les trucs qui sont assez de base de python, donc je recommande vivement la lecture d'un livre sur le sujet. Personnellement, j'ai utilisé "plongée en python." Juste autour de Google pour python introductions. Bonne chance!
Merci pour le livre de référence.
classes à travailler de la même manière dans python 2 vs 3 de sorte que vous devrait préciser que nous parlons ici.
J'utilise python 2.7. Il est maintenant ajouté à ma question initiale.

OriginalL'auteur SeekingAlpha | 2014-02-02

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *