Estoy tratando de aprender Python y ahora estoy tratando de acostumbrarme a las clases y cómo manipularlas con instancias.
Parece que no puedo entender este problema de práctica:
Cree y devuelva un objeto de estudiante cuyo nombre, edad y especialización sean los mismos que los proporcionados como entrada.
def make_student(name, age, major)
Simplemente no entiendo lo que significa por objeto, ¿significan que debería crear una matriz dentro de la función que contiene estos valores? o crear una clase y dejar que esta función esté dentro de ella, y asignar instancias? (antes de esta pregunta, me pidieron que organizara una clase de estudiante con nombre, edad y especialización dentro)
class Student:
name = "Unknown name"
age = 0
major = "Unknown major"
__init__
método es relevante aquí: docs.python.org/2/reference/datamodel.html#object.__init__Respuestas:
Tenga en cuenta que aunque uno de los principios en la filosofía de Python es "debería haber una, y preferiblemente solo una, forma obvia de hacerlo" , todavía hay múltiples formas de hacerlo. También puede usar los dos fragmentos de código siguientes para aprovechar las capacidades dinámicas de Python:
Prefiero el primero, pero hay casos en que el último puede ser útil, uno de ellos cuando se trabaja con bases de datos de documentos como MongoDB.
fuente
class Unicorn
y enhas_hooves = True
lugar dename = ""
.Crea una clase y dale un
__init__
método:Ahora, puede inicializar una instancia de la
Student
clase:Aunque no estoy seguro de por qué necesita una
make_student
función de estudiante si hace lo mismo queStudent.__init__
.fuente
Los objetos son instancias de clases. Las clases son solo los planos de los objetos. Entonces, dada su definición de clase,
Puede crear una
make_student
función asignando explícitamente los atributos a una nueva instancia deStudent
-Pero probablemente tenga más sentido hacer esto en un constructor (
__init__
) -Se llama al constructor cuando lo usa
Student()
. Tomará los argumentos definidos en el__init__
método. La firma del constructor ahora sería esencialmenteStudent(name, age, major)
.Si usa eso, entonces una
make_student
función es trivial (y superflua):Por diversión, aquí hay un ejemplo de cómo crear una
make_student
función sin definir una clase. Por favor, no intente esto en casa.fuente
__init__()
método diferente de un constructor?__init__
no es un constructor, "porque el objeto ya se construyó cuando__init__
se llama y ya tiene una referencia válida a la nueva instancia de la clase". ( diveintopython.net/object_oriented_framework/… )cuando crea un objeto usando una clase predefinida, al principio desea crear una variable para almacenar ese objeto. Luego puede crear objetos y almacenar variables que haya creado.
En realidad, este método init es el constructor de la clase. Puede inicializar ese método usando algunos atributos. En ese punto, cuando cree un objeto, tendrá que pasar algunos valores para atributos particulares.
fuente