Day 28 训练
Day 28 训练
- Python 类的定义与继承
- 类的复习
- 定义一个类
- Pass 占位符
- 初始化方法与普通方法
- 初始化方法
- 普通方法
- 类的继承
- 基本概念
- super() 函数
- 作业
Python 类的定义与继承
在学习 Python 的过程中,类是一个重要的概念。今天,我们来深入探讨一下类的定义与继承。
类的复习
相信大家都已经接触过类的概念了,类就像是一个模板,通过对模板实例化可以实现调用这个类的属性和方法。比如说,创建一个随机森林类,我们就可以方便地调用它的训练和预测方法。
定义一个类
现在,我们来学习如何自己定义一个类,这将帮助我们对类这一概念有更深刻的理解。定义一个类通常包括以下几个要素:
- 关键字 class :用于声明一个类。
- 类名 :通常遵循大驼峰命名法(UpperCamelCase),即每个单词的首字母都大写。
- 冒号(: :在类名后面加上冒号表示类的开始。
- 初始化函数 init(self) :用于初始化类的实例,注意 init 左右各有两个下划线,需要传入 self 这个特殊的参数,它指向类的实例化地址。
下面是一个简单的类定义示例:
class Teacher:def __init__(self):self.name = "Susan"self.subject = "English"self.age = 33
Pass 占位符
在定义类或者其他代码结构时,我们有时会先用 pass 占位,避免运行错误。等到想好具体要写什么再去补充代码。例如:
class ClassName:pass
在条件语句、循环语句、异常处理语句等依赖缩进的语句中,都可以用 pass 语句来占位。
x = 10
if x > 5:pass
else:print("x is not greater than 5")for i in range(3):passtry:print("hh")
except SomeError:pass
finally:pass
初始化方法与普通方法
初始化方法
初始化方法也叫构造方法,它是在创建对象时自动调用的。它用于初始化实例属性。例如:
class Teacher:def __init__(self, name, age):self.name = nameself.age = ageself.subject = "English"teacher = Teacher("Susan", 33)
print(teacher.name) # 输出: Susan
print(teacher.age) # 输出: 33
print(teacher.subject) # 输出: English
普通方法
普通方法是自己定义的方法,只有在调用类的这个方法的时候,函数才会执行。例如:
class Teacher:def __init__(self):self.name = "Susan"self.subject = "English"self.age = 33def teach_lesson(self):print("上课中")def criticize(self):print("批评人")t = Teacher()
t.teach_lesson() # 上课中
t.criticize() # 批评人
print(t.name) # Susan
类的继承
继承是面向对象编程的一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用和功能扩展。
基本概念
子类可以复用父类的代码,也可以重写父类的方法,还可以添加新的方法和属性。例如:
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}。")class MasterTeacher(Teacher):def __init__(self, name, subject, age, experience_years):super().__init__(name, subject, age)self.experience_years = experience_yearsdef 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 = nameself.age = agedef speak(self):print(f"{self.name} 发出声音")class Dog(Animal):def speak(self):super().speak() # 先调用父类的方法print("汪汪叫") # 再添加子类的行为dog = Dog("旺财", 3)
dog.speak()
这样,子类就可以在保留父类方法核心逻辑的基础上,进行功能扩展。
通过以上对类的定义与继承的学习,我们对 Python 中的面向对象编程有了更深入的理解。在实际编程中,合理地运用类和继承可以提高代码的可复用性和可维护性。
作业
作业一:
import mathclass Circle:def __init__(self, radius=1):# 初始化圆的半径,默认值为 1self.radius = radiusdef calculate_area(self):# 计算圆的面积,使用公式 πr²return math.pi * self.radius ** 2def calculate_circumference(self):# 计算圆的周长,使用公式 2πrreturn 2 * math.pi * self.radius
作业二:
class Rectangle:def __init__(self, length=1, width=1):# 初始化长方形的长和宽self.length = lengthself.width = widthdef calculate_area(self):# 计算长方形的面积return self.length * self.widthdef calculate_perimeter(self):# 计算长方形的周长return 2 * (self.length + self.width)def is_square(self):# 判断长方形是否为正方形return self.length == self.width
作业三:
import mathclass Circle:def __init__(self, radius):self.radius = radiusdef calculate_circumference(self):return math.pi * self.radius ** 2class Rectangle:def __init__(self, length, width):self.length = lengthself.width = widthdef area(self):return self.length * self.widthdef is_square(self):return self.length == self.widthdef create_shape(shape_type, *args):if shape_type == "circle":if len(args) != 1:raise ValueError("创建圆需要一个参数:半径")return Circle(args[0])elif shape_type == "rectangle":if len(args) != 2:raise ValueError("创建长方形需要两个参数:长和宽")return Rectangle(*args)else:raise ValueError(f"不支持的图形类型: {shape_type}")
浙大疏锦行