web-dev-qa-db-fra.com

Argument d'entrée de la classe Python

Je suis nouveau à la POO. Mon idée était d'implémenter le cours suivant:

class name(object, name):
    def __init__(self, name):
        print name

L'idée était alors de créer deux instances de cette classe:

person1 = name("jean")
person2 = name("dean")

Je sais que ce n'est pas possible, mais comment puis-je passer un argument d'entrée dans une instance d'une classe?

5
lars111
>>> class name(object):
...     def __init__(self, name):
...         self.name = name
... 
>>> person1 = name("jean")
>>> person2 = name("dean")
>>> person1.name
'jean'
>>> person2.name
'dean'
>>>

Est-ce ce que vous recherchez?

13
joel goldstick

Le problème dans votre définition initiale de la classe est que vous avez écrit:

class name(object, name):

Cela signifie que la classe hérite de la classe de base appelée "objet" et de la classe de base appelée "nom". Cependant, il n'y a pas de classe de base appelée "nom", donc cela échoue. Au lieu de cela, tout ce que vous avez à faire est d’avoir la variable dans la méthode spéciale init , ce qui signifie que la classe la prendra comme variable.

class name(object):
  def __init__(self, name):
    print name

Si vous souhaitez utiliser la variable dans d'autres méthodes que vous définissez dans la classe, vous pouvez affecter name à self.name et l'utiliser dans n'importe quelle autre méthode de la classe sans avoir à la transmettre à la méthode.

Par exemple:

class name(object):
  def __init__(self, name):
    self.name = name
  def PrintName(self):
    print self.name

a = name('bob')
a.PrintName()
bob
8
AbrahamB

Vous devez juste le faire dans la syntaxe correcte. Laissez-moi vous donner un exemple minimal que je viens de faire avec Python Interactive Shell:

>>> class MyNameClass():
...   def __init__(self, myname):
...       print myname
... 
>>> p1 = MyNameClass('John')
John
6
frlan

Supprimez le paramètre name de la déclaration de classe. La méthode init est utilisée pour passer des arguments à une classe lors de la création.

class Person(object):
  def __init__(self, name):
    self.name = name

me = Person("TheLazyScripter")
print me.name
3
TheLazyScripter