Python,创build对象

我正在尝试学习python,现在我正在尝试获取类的窍门以及如何使用实例来操作它们。

我似乎无法理解这个实践问题:

创build并返回一个学生对象,其名称,年龄和专业与input的相同

def make_student(name, age, major) 

我只是没有得到什么意思的对象,他们的意思是我应该在函数中创build一个数组,持有这些值? 或创build一个类,让这个函数在里面,并分配实例? (在这个问题之前,我被要求成立一个名字,年龄和专业的学生class)

 class Student: name = "Unknown name" age = 0 major = "Unknown major" 
 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 

请注意,尽pipePython哲学中的一个原则是“应该有一个,最好只有一个明显的方法” ,但是仍然有多种方法可以做到这一点。 您还可以使用以下两段代码来利用Python的dynamicfunction:

 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这样的文档数据库时。

创build一个类并给它一个__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__

对象是类的实例。 类只是对象的蓝图。 所以给你的class级定义 –

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

你可以创build一个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) 

为了好玩,下面是如何在不定义类的情况下创buildmake_student函数的示例。 请不要在家里尝试。

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