Python,创建对象

2024-04-20 14:06:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我好像不明白这个练习题:

创建并返回一个student对象,其名称、年龄和专业是 与输入相同

def make_student(name, age, major)

我只是不明白object的意思,他们是说我应该在函数中创建一个数组来保存这些值吗?或者创建一个类,让这个函数在其中,并分配实例?(在这个问题之前,我被要求建立一个学生班,里面有姓名、年龄和专业)

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

Tags: 对象实例函数name名称agemake专业
3条回答
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这样的文档数据库时。

对象是类的实例。类只是对象的蓝图。所以考虑到你的类定义-

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

通过显式地将属性分配给Student的新实例,可以创建make_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})()

创建一个类并给它一个__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__做同样的事情。

相关问题 更多 >