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})()