Python,创建对象

时间:2013-02-26 04:47:18

标签: python

我正在尝试学习python,而我现在正试图掌握类的内容以及如何使用实例操作它们。

我似乎无法理解这个练习题:

创建并返回名称,年龄和专业的学生对象 与作为输入的那些相同

def make_student(name, age, major)

我只是不知道对象意味着什么,它们是否意味着我应该在包含这些值的函数内部创建一个数组?或创建一个类,让这个函数在其中,并分配实例? (在这个问题之前,我被要求建立一个名字,年龄和内部专业的学生班级)

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

4 个答案:

答案 0 :(得分:153)

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 :(得分:44)

创建一个类并给它一个__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 :(得分:22)

对象是类的实例。类只是对象的蓝图。所以给出你的班级定义 -

# 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 :(得分:3)

在使用预定义类创建对象时,首先要创建一个用于存储该对象的变量。然后,您可以创建对象并存储您创建的变量。

class Student:
     def __init__(self):

# creating an object....

   student1=Student()

实际上,此 init 方法是类的构造函数。您可以使用一些属性来初始化该方法。在这一点上,创建对象时,您将必须为特定属性传递一些值..

class Student:
      def __init__(self,name,age):
            self.name=value
            self.age=value

 # creating an object.......

     student2=Student("smith",25)