当前位置: 首页 > news >正文

day 28

一个常见的类的定义包括了:

1. 关键字class

2. 类名

3. 语法固定符号冒号(:)

4. 一个初始化函数__init__(self)

Pass占位符和缩进

Python 通过缩进来定义代码块的结构。当解释器遇到像 def, class, if, for 这样的语句,并且后面跟着冒号 : 时,它就期望接下来会有一个或多个缩进的语句来构成这个代码块。如果它没有找到任何缩进的语句(即代码块是空的),它就无法确定这个结构的范围,因此会抛出 IndentationError。

pass 语句的存在就是为了解决这个问题:它本身不执行任何操作,但它是一个有效的 Python 语句。所以,当你需要一个语法上存在的代码块,但又暂时不想在其中放入任何实际的逻辑时,pass 就是一个完美的占位符,它告诉解释器:“这里有一个代码块,但它什么也不做。”

class ClassName: # 类名通常遵循大驼峰命名法 (UpperCamelCase),即每个单词的首字母都大写,class是定义类的关键词# 类的代码块 (可以包含属性定义、方法定义等)pass # pass 是一个占位符,表示这里暂时没有任何内容

类的初始化方法

self.xx是用来表明这个属性“归属于”这个类自己的(self)。比如self.name,就代表着:“自己的名字”,self等于“自己”,这个self指向类的实例化地址,传入的self.xx是它的属性。

以后要是用它的属性值,即使是从外界参数传入的,前面也必须加上self.xx,否则传入的参数没价值

class Teacher:def __init__(self, name, age):# 初始化方法,传入了参数self.name = name # 外界的参数,需要通过self.xxx来复制给类自己的属性self.age = ageself.subject = "English"  # 这个属性仍然是在创建时就设定好的# 创建一个Teacher对象的例子,构造方法的参数必须
teacher = Teacher("Susan", 33) # 如果在初始化方法中设置了非默认的参数,那么外界就必须要传入才行
print(teacher.name)  # 输出: Susan
print(teacher.age)   # 输出: 33
print(teacher.subject)  # 输出: English

类的普通方法

除了init方法(初始化方法,又名构造方法),还包含一些普通方法(自己定义)

普通方法和init方法的差别在于,init方法是类的构造方法,当创建对象时,会自动调用init方法----只要你创建这个类对象了,这个init函数就会执行

普通方法是只有你调用类的这个方法的时候,函数才会执行

注意!普通方法第一个参数也必须是 self

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)

类的继承

类已经是比较优秀的封装了,封装了函数、封装了属性

正如装饰器进一步封装了函数的可复用的功能,装饰器函数封装了函数

那么有没有东西可以进一步封装类呢?这就引出了类的继承

在面向对象编程中,继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用和功能扩展。子类可以:

1. 复用父类的代码(无需重新实现)。

2. 重写父类的方法(修改或增强功能)。

3. 添加新的方法和属性(扩展功能)。

题目1

定义圆(Circle)类

要求:

1.包含属性:半径 radius。

2.包含方法:

●calculate_area():计算圆的面积(公式:πr²)。

●calculate_circumference():计算圆的周长(公式:2πr)。

3.初始化时需传入半径,默认值为 1。

import mathclass Circle:def __init__(self, radius=1):"""初始化 Circle 类的实例。:param radius: 圆的半径,默认为 1。"""self.radius = radiusdef calculate_area(self):"""计算圆的面积。:return: 圆的面积,使用公式 πr² 计算。"""return math.pi * self.radius ** 2def calculate_circumference(self):"""计算圆的周长。:return: 圆的周长,使用公式 2πr 计算。"""return 2 * math.pi * self.radius

题目2

定义长方形(Rectangle)类

1.包含属性:长 length、宽 width。

2.包含方法:

●calculate_area():计算面积(公式:长×宽)。

●calculate_perimeter():计算周长(公式:2×(长+宽))。 is_square() 方法,判断是否为正方形(长 == 宽)。

3.初始化时需传入长和宽,默认值均为 1。

class Rectangle:def __init__(self, length=1, width=1):"""初始化 Rectangle 类的实例。:param length: 长方形的长,默认为 1。:param width: 长方形的宽,默认为 1。"""self.length = lengthself.width = widthdef calculate_area(self):"""计算长方形的面积。:return: 长方形的面积,使用公式 长×宽 计算。"""return self.length * self.widthdef calculate_perimeter(self):"""计算长方形的周长。:return: 长方形的周长,使用公式 2×(长 + 宽) 计算。"""return 2 * (self.length + self.width)def is_square(self):"""判断该长方形是否为正方形。:return: 如果长等于宽则返回 True,否则返回 False。"""return self.length == self.width

题目3:图形工厂

创建一个工厂函数 create_shape(shape_type, *args),根据类型创建不同图形对象:图形工厂(函数或类)

shape_type="circle":创建圆(参数:半径)。

shape_type="rectangle":创建长方形(参数:长、宽)。

import mathclass Circle:def __init__(self, radius=1):self.radius = radiusdef calculate_area(self):return math.pi * self.radius ** 2def calculate_circumference(self):return 2 * math.pi * self.radiusclass 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.widthdef create_shape(shape_type, *args):"""根据传入的图形类型和参数创建相应的图形对象。:param shape_type: 图形类型,支持 "circle" 和 "rectangle"。:param args: 创建图形所需的参数,对于 "circle" 是半径,对于 "rectangle" 是长和宽。:return: 相应的图形对象,如果类型不支持则返回 None。"""if shape_type == "circle":if len(args) == 0:return Circle()else:return Circle(*args)elif shape_type == "rectangle":if len(args) == 0:return Rectangle()else:return Rectangle(*args)else:return None

@浙大疏锦行

相关文章:

  • 543.二叉树的直径
  • JavaScript基础-对象的相关概念
  • 洛谷 全排列问题
  • BUUCTF——Nmap
  • java的面向对象思想
  • 小蜗牛拨号助手用户使用手册
  • 2.1.3
  • 【基于栈的 Vue3 路由历史管理:优雅处理多系统间的导航】
  • 使用python进行船舶轨迹跟踪
  • 符合Python风格的对象(对象表示形式)
  • 使用HtmlAgilityPack采集墨迹天气中的天气数据
  • 简单神经网络(ANN)实现:从零开始构建第一个模型
  • python项目参考文献
  • 用Python玩转人工智能——数字识别技术 之二
  • QT软件安装
  • 高效完成任务:制定标准与限时完成的双重法宝
  • 三层固定实体架构:高效实现图上的检索增强生成(RAG)
  • 2024 山东省ccpc省赛
  • 【持续更新中】架构面试知识学习总结
  • 回溯法理论基础 LeetCode 77. 组合 LeetCode 216.组合总和III LeetCode 17.电话号码的字母组合
  • 广州医药集团有限公司原党委书记、董事长李楚源被“双开”
  • 幼儿园教师拍打孩子额头,新疆库尔勒教育局:涉事教师已被辞退
  • 国防部:菲方应停止一切侵权挑衅危险举动,否则只会自食苦果
  • 从《让·桑特伊》到《追忆》,假故事的胜利
  • 线下哪些商家支持无理由退货?查询方法公布
  • 缺字危机:一本书背后有多少“不存在”的汉字?