151 votes

Python, création d'objets

J'essaie d'apprendre Python et j'essaie maintenant de comprendre les classes et comment les manipuler avec des instances.

Je n'arrive pas à comprendre ce problème pratique :

Créer et renvoyer un objet étudiant dont le nom, l'âge et la spécialité sont les suivants les mêmes que ceux donnés en entrée

def make_student(name, age, major)

Je ne comprends pas ce qu'on entend par "objet", est-ce qu'on veut dire que je dois créer un tableau à l'intérieur de la fonction qui contient ces valeurs ? ou créer une classe et laisser cette fonction s'y trouver, et assigner des instances ? (avant cette question, on m'a demandé de créer une classe d'étudiants avec le nom, l'âge et la matière principale).

class Student:
    name = "Unknown name"
    age = 0
    major = "Unknown major"

190voto

Wulfram Points 911
class Student(object):
    name = ""
    age = 0
    major = ""

    # The class "constructor" - It's actually an initializer 
    def __init__(self, name, age, major):
        self.name = name
        self.age = age
        self.major = major

def make_student(name, age, major):
    student = Student(name, age, major)
    return student

Notez que même si l'un des principes de la philosophie de Python est "il devrait y avoir une - et de préférence une seule - manière évidente de le faire". il existe encore de multiples façons de le faire. Vous pouvez également utiliser les deux extraits de code suivants pour tirer parti des capacités dynamiques de Python :

class Student(object):
    name = ""
    age = 0
    major = ""

def make_student(name, age, major):
    student = Student()
    student.name = name
    student.age = age
    student.major = major
    # Note: I didn't need to create a variable in the class definition before doing this.
    student.gpa = float(4.0)
    return student

Je préfère la première méthode, mais il y a des cas où la seconde peut être utile, notamment lorsque l'on travaille avec des bases de données documentaires comme MongoDB.

54voto

Blender Points 114729

Créez une classe et donnez-lui un __init__ méthode :

class Student:
    def __init__(self, name, age, major):
        self.name = name
        self.age = age
        self.major = major

    def is_old(self):
        return self.age > 100

Maintenant, vous pouvez initialiser une instance de la fonction Student classe :

>>> s = Student('John', 88, None)
>>> s.name
    'John'
>>> s.age
    88

Bien que je ne sois pas sûr de savoir pourquoi vous avez besoin d'une make_student fonction d'étudiant si elle fait la même chose que Student.__init__ .

30voto

pyrospade Points 2651

Les objets sont des instances de classes. Les classes sont juste les plans des objets. Donc, étant donné votre définition de classe -

# Note the added (object) - this is the preferred way of creating new classes
class Student(object):
    name = "Unknown name"
    age = 0
    major = "Unknown major"

Vous pouvez créer un make_student en affectant explicitement les attributs à une nouvelle instance de la fonction Student -

def make_student(name, age, major):
    student = Student()
    student.name = name
    student.age = age
    student.major = major
    return student

Mais il est probablement plus logique de faire cela dans un constructeur ( __init__ ) -

class Student(object):
    def __init__(self, name="Unknown name", age=0, major="Unknown major"):
        self.name = name
        self.age = age
        self.major = major

Le constructeur est appelé lorsque vous utilisez Student() . Il prendra les arguments définis dans la section __init__ méthode. La signature du constructeur serait maintenant essentiellement Student(name, age, major) .

Si vous utilisez cela, alors un make_student est triviale (et superflue).

def make_student(name, age, major):
    return Student(name, age, major)

Pour le plaisir, voici un exemple de la façon de créer une make_student sans définir de classe. N'essayez pas cela chez vous.

def make_student(name, age, major):
    return type('Student', (object,),
                {'name': name, 'age': age, 'major': major})()

3voto

GT_hash Points 81

Lorsque vous créez un objet en utilisant une classe prédéfinie, vous voulez d'abord créer une variable pour stocker cet objet. Ensuite, vous pouvez créer un objet et stocker la variable que vous avez créée.

class Student:
     def __init__(self):

# creating an object....

   student1=Student()

En fait, cette init La méthode est le constructeur de la classe. Vous pouvez initialiser cette méthode en utilisant certains attributs Dans ce point, lorsque vous créez un objet, vous devrez passer certaines valeurs pour des attributs particuliers

class Student:
      def __init__(self,name,age):
            self.name=value
            self.age=value

 # creating an object.......

     student2=Student("smith",25)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X