Bootstrap

python 模块和包、类和对象

模块

模块是包含 Python 代码的文件,通常用于组织相关的函数、类和其他语句。模块可以被导入并在其他 Python 文件中使用。

创建模块

假设你创建了一个名为 mymodule.py 的文件,内容如下:

# mymodule.pydef greet(name):    return f"你好, {name}!"class Person:    def __init__(self, name, age):        self.name = name        self.age = age    def introduce(self):        return f"我的名字是 {self.name},我今年 {self.age} 岁。"

导入模块

在另一个 Python 文件中,你可以这样导入并使用这个模块:​​​​​​​

import mymodule# 使用模块中的函数print(mymodule.greet("Alice"))  # 输出: 你好, Alice!# 使用模块中的类person = mymodule.Person("Bob", 25)print(person.introduce())  # 输出: 我的名字是 Bob,我今年 25 岁。

从模块中导入特定对象

你也可以只导入模块中的特定函数或类:​​​​​​​

from mymodule import greet, Personprint(greet("Alice"))  # 输出: 你好, Alice!person = Person("Bob", 25)print(person.introduce())  # 输出: 我的名字是 Bob,我今年 25 岁。

别名

你可以为导入的模块或对象指定别名:​​​​​​​

import mymodule as mmprint(mm.greet("Alice"))  # 输出: 你好, Alice!from mymodule import Person as Pperson = P("Bob", 25)print(person.introduce())  # 输出: 我的名字是 Bob,我今年 25 岁。

包是一个包含多个模块的目录,并且该目录下有一个特殊的 __init__.py 文件。__init__.py 可以为空,但它的存在表示该目录是一个包。

创建包

假设你创建了一个名为 mypackage 的目录,结构如下:​​​​​​​

mypackage/    __init__.py    module1.py    module2.pymodule1.py 内容:# module1.pydef func1():    return "这是来自 module1"module2.py 内容:# module2.pydef func2():    return "这是来自 module2"__init__.py 可以为空,或者可以用来初始化包的内容:# __init__.pyfrom .module1 import func1from .module2 import func2

导入包

在另一个 Python 文件中,你可以这样导入并使用这个包:​​​​​​​

import mypackageprint(mypackage.func1())  # 输出: 这是来自 module1print(mypackage.func2())  # 输出: 这是来自 module2

从包中导入模块

你也可以直接从包中导入模块:​​​​​​​

from mypackage import module1, module2print(module1.func1())  # 输出: 这是来自 module1print(module2.func2())  # 输出: 这是来自 module2

类和对象

类 (Classes)

类是一种用户定义的数据类型,它封装了数据(属性)和方法(行为)。类是面向对象编程的基础。

定义类

class Person:    def __init__(self, name, age):        self.name = name        self.age = age    def introduce(self):        return f"我的名字是 {self.name},我今年 {self.age} 岁。"    def get_age(self):        return self.age    def set_age(self, new_age):        if new_age > 0:            self.age = new_age        else:            print("年龄必须是正数。")

创建对象​​​​​​​

person1 = Person("Alice", 30)print(person1.introduce())  # 输出: 我的名字是 Alice,我今年 30 岁。person2 = Person("Bob", 25)print(person2.introduce())  # 输出: 我的名字是 Bob,我今年 25 岁。

访问属性和方法​​​​​​​

print(person1.name)  # 输出: Aliceprint(person1.get_age())  # 输出: 30person1.set_age(35)print(person1.get_age())  # 输出: 35person1.set_age(-10)  # 输出: 年龄必须是正数。

继承

继承允许一个类继承另一个类的属性和方法。

定义子类​​​​​​​

class Student(Person):    def __init__(self, name, age, student_id):        super().__init__(name, age)        self.student_id = student_id    def study(self):        return f"{self.name} 正在学习。"    def introduce(self):        return f"我的名字是 {self.name},我今年 {self.age} 岁,我的学号是 {self.student_id}。"

创建子类对象​​​​​​​

student1 = Student("Charlie", 20, "S12345")print(student1.introduce())  # 输出: 我的名字是 Charlie,我今年 20 岁,我的学号是 S12345。print(student1.study())  # 输出: Charlie 正在学习。

多态 (Polymorphism)

多态允许不同类的对象通过相同的接口进行调用,表现出不同的行为。

示例

class Teacher(Person):    def __init__(self, name, age, subject):        super().__init__(name, age)        self.subject = subject    def teach(self):        return f"{self.name} 正在教 {self.subject}。"    def introduce(self):        return f"我的名字是 {self.name},我今年 {self.age} 岁,我教 {self.subject}。"def introduce_person(person):    print(person.introduce())# 创建不同类型的对象person1 = Person("Alice", 30)student1 = Student("Charlie", 20, "S12345")teacher1 = Teacher("David", 40, "数学")# 调用相同的方法,表现出不同的行为introduce_person(person1)  # 输出: 我的名字是 Alice,我今年 30 岁。introduce_person(student1)  # 输出: 我的名字是 Charlie,我今年 20 岁,我的学号是 S12345。introduce_person(teacher1)  # 输出: 我的名字是 David,我今年 40 岁,我教 数学。

总结

模块 是包含相关功能的 Python 文件。

包 是包含多个模块的目录,通常用于组织大型项目。

类 是一种用户定义的数据类型,封装了数据和方法。

对象 是类的实例。

继承 允许一个类继承另一个类的属性和方法。

多态 允许不同类的对象通过相同的接口进行调用,表现出不同的行为。

;