模块
模块是包含 Python 代码的文件,通常用于组织相关的函数、类和其他语句。模块可以被导入并在其他 Python 文件中使用。
创建模块
假设你创建了一个名为 mymodule.py 的文件,内容如下:
# mymodule.pydef greet(name):return f"你好, {name}!"class Person:def __init__(self, name, age):self.name = nameself.age = agedef 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__.pymodule1.pymodule2.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 = nameself.age = agedef introduce(self):return f"我的名字是 {self.name},我今年 {self.age} 岁。"def get_age(self):return self.agedef set_age(self, new_age):if new_age > 0:self.age = new_ageelse: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_iddef 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 = subjectdef 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 文件。
包 是包含多个模块的目录,通常用于组织大型项目。
类 是一种用户定义的数据类型,封装了数据和方法。
对象 是类的实例。
继承 允许一个类继承另一个类的属性和方法。
多态 允许不同类的对象通过相同的接口进行调用,表现出不同的行为。
