day28 python 类与继承
一、类的基本定义
类是对属性和方法的封装,可以理解为一个模板。通过对模板实例化,我们可以创建出具有相同属性和方法的对象。例如,我们可以定义一个 Teacher
类,然后通过实例化这个类来创建具体的教师对象。
1. 类的定义语法
定义一个类的基本语法如下:
class ClassName:# 类的代码块(可以包含属性定义、方法定义等)pass # pass 是一个占位符,表示这里暂时没有任何内容
类名通常遵循大驼峰命名法(UpperCamelCase),即每个单词的首字母都大写。例如,Teacher
、RandomForest
等。
2. 初始化方法 __init__
初始化方法(也称为构造方法)是一个特殊的函数,用于在创建类的实例时初始化实例的属性。它的定义方式如下:
class Teacher:def __init__(self, name, age):self.name = name # 使用 self 来定义类的属性self.age = ageself.subject = "English" # 这个属性是固定的
在 __init__
方法中,self
是一个指向类实例的引用,用于访问类的属性和方法。例如,self.name
表示当前实例的 name
属性。
3. 创建类的实例
通过类名后跟括号的方式,可以创建类的实例:
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 = nameself.subject = subjectself.age = agedef 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 = nameself.subject = subjectself.age = agedef 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("微积分") # 输出: 王教授正在举办关于微积分的讲座。
4. 使用 super()
调用父类方法
在子类中,可以通过 super()
函数调用父类的方法。这在重写父类方法时非常有用,可以保留父类的核心逻辑并在此基础上扩展。
class Animal:def __init__(self, name, age):self.name = nameself.age = agedef speak(self):print(f"{self.name} 发出声音")class Dog(Animal):def speak(self):super().speak() # 调用父类的方法print("汪汪叫") # 添加子类的行为dog = Dog("旺财", 3)
dog.speak()
# 输出:
# 旺财 发出声音
# 汪汪叫
四、总结
通过类和继承,我们可以实现代码的封装、复用和扩展。类的定义包括初始化方法和普通方法,而继承则允许子类继承父类的属性和方法,并通过方法重写和新增方法来扩展功能。
@浙大疏锦行