Question

J'ai une classe avec une fonction __init__.

Comment puis-je retourner une valeur entière de cette fonction lorsqu'un objet est créé?

J'ai écrit un programme, où __init__ fait l'analyse syntaxique de la ligne de commande et je dois avoir un ensemble de valeurs. Est-il acceptable défini dans la variable globale et l'utiliser dans d'autres fonctions membres? Si oui, comment le faire? Jusqu'à présent, je déclarais une variable en dehors des cours. et sa mise en une fonction ne reflète pas dans d'autres fonctions ??

Était-ce utile?

La solution

__init__ doit retourner Aucun. Vous ne pouvez pas (ou du moins ne devrait pas) retourner autre chose.

Essayez de faire tout ce que vous voulez retourner une variable d'instance (ou la fonction).

>>> class Foo:
...     def __init__(self):
...         return 42
... 
>>> foo = Foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() should return None

Autres conseils

Pourquoi voudriez-vous faire?

Si vous voulez retourner un autre objet quand une classe est appelée, utilisez la méthode __new__():

class MyClass(object):
    def __init__(self):
        print "never called in this case"
    def __new__(cls):
        return 42

obj = MyClass()
print obj

De la de __init__ :

  

une contrainte particulière sur les constructeurs, aucune valeur peut être renvoyée; Ce faisant provoquera une TypeError à soulever lors de l'exécution.

Pour preuve, ce code:

class Foo(object):
    def __init__(self):
        return 2

f = Foo()

Donne cette erreur:

Traceback (most recent call last):
  File "test_init.py", line 5, in <module>
    f = Foo()
TypeError: __init__() should return None, not 'int'

Exemple d'utilisation de la matière en question peut être comme:

class SampleObject(object)

    def __new__(cls,Item)
        if cls.IsValid(Item):
            return super(SampleObject, cls).__new__(cls)
        else:
            return None

    def __init__(self,Item)
        self.InitData(Item) #large amount of data and very complex calculations

...

ValidObjects=[]
for i in data:
    Item=SampleObject(i)
    if Item:             # in case the i data is valid for the sample object
        ValidObjects.Append(Item)

Je n'ai pas assez de réputation que je ne peux pas écrire un commentaire, il est fou! Je voudrais pouvoir poster un commentaire à Weronika

La méthode __init__, comme d'autres méthodes et fonctions par défaut retourne Aucun en l'absence d'une déclaration de retour, de sorte que vous pouvez l'écrire comme l'une de celles-ci:

class Foo:
    def __init__(self):
        self.value=42

class Bar:
    def __init__(self):
        self.value=42
        return None

Mais, bien sûr, en ajoutant le return None ne vous achète pas quoi que ce soit.

Je ne sais pas ce que vous recherchez, mais vous pourriez être intéressé par un de ces:

class Foo:
    def __init__(self):
        self.value=42
    def __str__(self):
        return str(self.value)

f=Foo()
print f.value
print f

impressions:

42
42

__init__ ne retourne rien et doit toujours revenir None.

Je voulais juste ajouter, vous pouvez retourner dans les classes __init__

@property
def failureException(self):
    class MyCustomException(AssertionError):
        def __init__(self_, *args, **kwargs):
            *** Your code here ***
            return super().__init__(*args, **kwargs)

    MyCustomException.__name__ = AssertionError.__name__
    return MyCustomException

La méthode ci-dessus vous aide à mettre en œuvre une action spécifique sur une exception dans votre test

Vous pouvez simplement le mettre à une variable de classe et de le lire à partir du programme principal:

class Foo:
    def __init__(self):
        #Do your stuff here
        self.returncode = 42
bar = Foo()
baz = bar.returncode

Eh bien, si vous ne se soucient pas de l'instance d'objet plus ... vous pouvez simplement le remplacer!

class MuaHaHa():
def __init__(self, ret):
    self=ret

print MuaHaHa('foo')=='foo'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top