类是对属性和方法的封装,可以理解为一个模板。通过对模板实例化,我们可以创建出具有相同属性和方法的对象。例如,我们可以定义一个 Teacher
类,然后通过实例化这个类来创建具体的教师对象。
定义一个类的基本语法如下:
class ClassName:
# 类的代码块(可以包含属性定义、方法定义等)
pass # pass 是一个占位符,表示这里暂时没有任何内容
类名通常遵循大驼峰命名法(UpperCamelCase),即每个单词的首字母都大写。例如,Teacher
、RandomForest
等。
__init__
初始化方法(也称为构造方法)是一个特殊的函数,用于在创建类的实例时初始化实例的属性。它的定义方式如下:
class Teacher:
def __init__(self, name, age):
self.name = name # 使用 self 来定义类的属性
self.age = age
self.subject = "English" # 这个属性是固定的
在 __init__
方法中,self
是一个指向类实例的引用,用于访问类的属性和方法。例如,self.name
表示当前实例的 name
属性。
通过类名后跟括号的方式,可以创建类的实例:
teacher = Teacher("Susan", 33)
print(teacher.name) # 输出: Susan
print(teacher.age) # 输出: 33
print(teacher.subject) # 输出: English
除了初始化方法,类还可以定义普通方法。普通方法是类的行为逻辑,只有在显式调用时才会执行。
class Teacher:
def __init__(self, name, subject, age):
self.name = name
self.subject = subject
self.age = age
def teach_lesson(self):
print(f"{self.name}正在教{self.subject}。")
def criticize(self, student_name):
print(f"{self.name}正在批评{student_name}。")
# 创建类的实例
teacher = Teacher("Susan", "English", 33)
# 调用普通方法
teacher.teach_lesson() # 输出: Susan正在教English。
teacher.criticize("John") # 输出: Susan正在批评John。
类的继承是面向对象编程的核心概念之一。通过继承,一个子类可以继承父类的属性和方法,从而实现代码复用和功能扩展。子类可以:
复用父类的代码(无需重新实现)。
重写父类的方法(修改或增强功能)。
添加新的方法和属性(扩展功能)。
假设我们有一个 Teacher
类,现在我们想定义一个 MasterTeacher
类,它继承自 Teacher
类,并添加一些新的功能。
class Teacher:
def __init__(self, name, subject, age):
self.name = name
self.subject = subject
self.age = age
def teach_lesson(self):
print(f"{self.name}正在教{self.subject}。")
def criticize(self, student_name):
print(f"{self.name}正在批评{student_name}。")
# 继承 Teacher 类
class MasterTeacher(Teacher):
def __init__(self, name, subject, age, experience_years):
super().__init__(name, subject, age) # 调用父类的构造方法
self.experience_years = experience_years # 添加子类特有的属性
# 重写父类的方法
def teach_lesson(self):
print(f"{self.name}(特级教师)正在用高级方法教授{self.subject}。")
# 新增子类特有的方法
def give_lecture(self, topic):
print(f"{self.name}正在举办关于{topic}的讲座。")
# 创建子类实例
master = MasterTeacher("王教授", "数学", 45, 20)
# 调用继承的方法
master.teach_lesson() # 输出: 王教授(特级教师)正在用高级方法教授数学。
master.criticize("李同学") # 输出: 王教授正在批评李同学。
# 调用子类特有的方法
master.give_lecture("微积分") # 输出: 王教授正在举办关于微积分的讲座。
super()
调用父类方法在子类中,可以通过 super()
函数调用父类的方法。这在重写父类方法时非常有用,可以保留父类的核心逻辑并在此基础上扩展。
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def speak(self):
print(f"{self.name} 发出声音")
class Dog(Animal):
def speak(self):
super().speak() # 调用父类的方法
print("汪汪叫") # 添加子类的行为
dog = Dog("旺财", 3)
dog.speak()
# 输出:
# 旺财 发出声音
# 汪汪叫
通过类和继承,我们可以实现代码的封装、复用和扩展。类的定义包括初始化方法和普通方法,而继承则允许子类继承父类的属性和方法,并通过方法重写和新增方法来扩展功能。
@浙大疏锦行