问题:Python,创建对象
我正在尝试学习python,现在我试图摆脱类的困扰,以及如何使用实例操纵它们。
我似乎无法理解这个练习问题:
创建并返回其名称,年龄和专业与输入相同的学生对象
def make_student(name, age, major)
我只是不了解对象的含义,是否意味着我应该在包含这些值的函数内创建一个数组?或创建一个类,让该函数位于其中,并分配实例?(在问这个问题之前,我被要求开设一个学生班,里面要说姓名,年龄和专业)
class Student:
name = "Unknown name"
age = 0
major = "Unknown major"
回答 0
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
请注意,即使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)时。
回答 1
创建一个类并为其提供__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.__init__
。
回答 2
对象是类的实例。类只是对象的蓝图。因此,根据您的类定义-
# 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})()
回答 3
使用predefine类创建对象时,首先要创建一个用于存储该对象的变量。然后,您可以创建对象并存储您创建的变量。
class Student:
def __init__(self):
# creating an object....
student1=Student()
实际上,此init方法是class的构造方法。您可以使用一些属性来初始化该方法。在这一点上,创建对象时,您将必须为特定属性传递一些值。
class Student:
def __init__(self,name,age):
self.name=value
self.age=value
# creating an object.......
student2=Student("smith",25)