我正在尝试学习python,我现在正试图获得类的挂起以及如何使用实例操作它们.
我似乎无法理解这个练习题:
创建并返回其名称,年龄和专业与输入相同的学生对象
def make_student(name, age, major)
Run Code Online (Sandbox Code Playgroud)
我只是没有得到对象的含义,它们是否意味着我应该在包含这些值的函数内创建一个数组?或创建一个类,让这个函数在其中,并分配实例?(在这个问题之前,我被要求建立一个名字,年龄和内部专业的学生班)
class Student:
name = "Unknown name"
age = 0
major = "Unknown major"
Run Code Online (Sandbox Code Playgroud)
Wul*_*ram 161
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
Run Code Online (Sandbox Code Playgroud)
请注意,尽管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
Run Code Online (Sandbox Code Playgroud)
我更喜欢前者,但有些情况下后者可能很有用 - 一个是在使用像MongoDB这样的文档数据库时.
Ble*_*der 47
创建一个类并给它一个__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
Run Code Online (Sandbox Code Playgroud)
现在,您可以初始化Student该类的实例:
>>> s = Student('John', 88, None)
>>> s.name
'John'
>>> s.age
88
Run Code Online (Sandbox Code Playgroud)
虽然我不确定为什么你需要一个make_student学生功能,如果它做同样的事情Student.__init__.
pyr*_*ade 24
对象是类的实例.类只是对象的蓝图.所以鉴于你的班级定义 -
# Note the added (object) - this is the preferred way of creating new classes
class Student(object):
name = "Unknown name"
age = 0
major = "Unknown major"
Run Code Online (Sandbox Code Playgroud)
您可以make_student通过将属性显式分配给新实例来创建函数Student-
def make_student(name, age, major):
student = Student()
student.name = name
student.age = age
student.major = major
return student
Run Code Online (Sandbox Code Playgroud)
但是在构造函数(__init__)中执行此操作可能更有意义-
class Student(object):
def __init__(self, name="Unknown name", age=0, major="Unknown major"):
self.name = name
self.age = age
self.major = major
Run Code Online (Sandbox Code Playgroud)
使用时会调用构造函数Student().它将采用__init__方法中定义的参数.现在构造函数签名基本上是Student(name, age, major).
如果你使用它,那么一个make_student函数是微不足道的(并且是多余的) -
def make_student(name, age, major):
return Student(name, age, major)
Run Code Online (Sandbox Code Playgroud)
为了好玩,这里有一个如何在make_student不定义类的情况下创建函数的示例.请不要在家里试试.
def make_student(name, age, major):
return type('Student', (object,),
{'name': name, 'age': age, 'major': major})()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
436865 次 |
| 最近记录: |