Python, создание объектов
Я пытаюсь изучить python, и теперь я пытаюсь получить виджет классов и как манипулировать ими с помощью экземпляров.
Я не могу понять эту проблему:
Создайте и верните объект-ученик, чье имя, возраст и майор
те же, что указаны в качестве входных данных
def make_student(name, age, major)
Я просто не понимаю, что это означает для объекта, они означают, что я должен создать массив внутри функции, которая содержит эти значения? или создать класс и позволить этой функции быть внутри него и назначать экземпляры? (перед этим вопросом меня попросили создать класс ученика с именем, возрастом и основным внутри)
class Student:
name = "Unknown name"
age = 0
major = "Unknown major"
Ответы
Ответ 1
class Student(object):
name = ""
age = 0
major = ""
# The class "constructor" - It 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
Обратите внимание, что хотя один из принципов философии Python - "должен быть один - и желательно только один - очевидный способ сделать это", есть еще несколько способов сделать это. Вы также можете использовать два следующих фрагмента кода, чтобы воспользоваться динамическими возможностями 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
Я предпочитаю первый, но есть примеры, когда последнее может быть полезным - одно при работе с базами данных документов, такими как MongoDB.
Ответ 2
Создайте класс и дайте ему метод __init__
:
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
Теперь вы можете инициализировать экземпляр класса Student
:
>>> s = Student('John', 88, None)
>>> s.name
'John'
>>> s.age
88
Хотя я не уверен, зачем вам нужна функция make_student
student, если она делает то же самое, что и Student.__init__
.
Ответ 3
Объекты - это экземпляры классов. Классы - это всего лишь чертежи для объектов. Поэтому, учитывая ваше определение класса -
# Note the added (object) - this is the preferred way of creating new classes
class Student(object):
name = "Unknown name"
age = 0
major = "Unknown major"
Вы можете создать функцию make_student
, явно назначив атрибуты новому экземпляру Student
-
def make_student(name, age, major):
student = Student()
student.name = name
student.age = age
student.major = major
return student
Но, вероятно, имеет смысл сделать это в конструкторе (__init__
) -
class Student(object):
def __init__(self, name="Unknown name", age=0, major="Unknown major"):
self.name = name
self.age = age
self.major = major
Конструктор вызывается при использовании Student()
. Он примет аргументы, определенные в методе __init__
. Теперь подпись конструктора будет Student(name, age, major)
.
Если вы используете это, то функция make_student
тривиальна (и лишняя) -
def make_student(name, age, major):
return Student(name, age, major)
Для развлечения здесь приведен пример создания функции make_student
без определения класса. Пожалуйста, не пробуйте это дома.
def make_student(name, age, major):
return type('Student', (object,),
{'name': name, 'age': age, 'major': major})()