Python, objecten maken

Ik probeer Python te leren en nu probeer ik klassen onder de knie te krijgen en hoe ik ze kan manipuleren met instanties.

Ik begrijp dit oefenprobleem niet:

Maak en retourneer een leerlingobject waarvan de naam, leeftijd en hoofdvak zijn
hetzelfde als die gegeven als invoer

def make_student(name, age, major)

Ik begrijp gewoon niet wat het betekent met object, bedoelen ze dat ik een array moet maken in de functie die deze waarden bevat? of maak een klasse en laat deze functie erin staan, en wijs instanties toe? (vóór deze vraag werd mij gevraagd om een studentenklas op te zetten met naam, leeftijd en hoofdvak erin)

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

Antwoord 1, autoriteit 100%

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

Merk op dat hoewel een van de principes in de filosofie van Python “er zou één – en bij voorkeur slechts één – voor de hand liggende manier moeten zijn om het te doen”, er nog steeds meerdere manieren zijn om dit te doen. Je kunt ook de volgende twee codefragmenten gebruiken om te profiteren van de dynamische mogelijkheden van 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

Ik geef de voorkeur aan de eerste, maar er zijn gevallen waarin het laatste nuttig kan zijn – één is wanneer het werkt met documentdatabases zoals MongoDB.


Antwoord 2, Autoriteit 29%

Maak een klas en geef het een __init__METHODE:

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

Nu kunt u een exemplaar van de StudentKlasse initialiseren:

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

Hoewel ik niet zeker weet waarom u een make_studentstudent-functie nodig hebt als dit hetzelfde doet als Student.__init__.


Antwoord 3, Autoriteit 16%

Objecten zijn gevallen van klassen. Klassen zijn slechts de blauwdrukken voor objecten. Dus gezien je klasdefinitie –

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

U kunt een make_student–functie maken door expliciet de kenmerken toe te wijzen aan een nieuw exemplaar van Student

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

Maar het is waarschijnlijk logischer om dit in een constructor te doen (__init__) –

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

De constructor wordt aangeroepen als je Student()gebruikt. Het zal de argumenten gebruiken die zijn gedefinieerd in de __init__methode. De handtekening van de constructor zou nu in wezen Student(name, age, major)zijn.

Als je dat gebruikt, dan is een functie make_studenttriviaal (en overbodig) –

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

Voor de lol, hier is een voorbeeld van hoe je een functie make_studentmaakt zonder een klas te definiëren. Probeer dit niet thuis.

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

Antwoord 4, autoriteit 2%

wanneer u een object maakt met predefine class, wilt u eerst een variabele maken om dat object op te slaan. Vervolgens kunt u een object maken en een variabele opslaan die u hebt gemaakt.

class Student:
     def __init__(self):
# creating an object....
   student1=Student()

Eigenlijk is deze init-methode de constructor van class.u kunt die methode initialiseren met behulp van enkele attributen.. Op dat moment, wanneer u een object maakt, moet u enkele waarden doorgeven voor bepaalde attributen ..

class Student:
      def __init__(self,name,age):
            self.name=value
            self.age=value
 # creating an object.......
     student2=Student("smith",25)

Other episodes