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

(15)100天python从入门到拿捏《面向对象编程》

面向对象编程

一、面向对象编程简介

面向对象编程是一种组织代码的思想。

  • 一切皆对象;
  • 通过 类(class) 定义对象的模板;
  • 通过 对象(object) 实际使用数据与功能。

📘 理解类与对象

概念说明说明
模板、定义了一类对象共有的属性和方法“学生类”
对象类的具体实例“张三”这个学生

二、定义类与创建对象

基本语法:

class 类名:def 方法(self):pass

📘 案例

class Student:def say_hello(self):print("你好,我是学生!")# 创建对象
stu = Student()
stu.say_hello()

🧾 输出

你好,我是学生!

三、构造方法(__init__

构造方法在创建对象时自动调用,用来初始化属性。

📘 案例

class Student:def __init__(self, name, age):self.name = name   # 实例属性self.age = agedef show_info(self):print(f"姓名: {self.name}, 年龄: {self.age}")stu1 = Student("张三", 20)
stu1.show_info()

🧾 输出

姓名: 张三, 年龄: 20

四、类属性与实例属性

属性类型定义位置所有对象是否共享示例
实例属性构造函数 __init__❌ 否每个学生的姓名不同
类属性类体内、方法外✅ 是所有学生都来自同一学校

📘 案例

class Student:school = "北京大学"  # 类属性def __init__(self, name):self.name = name  # 实例属性stu1 = Student("小明")
stu2 = Student("小红")
print(stu1.school, stu2.school)
print(stu1.name, stu2.name)

🧾 输出

北京大学 北京大学
小明 小红

五、方法类型:实例方法、类方法、静态方法

方法类型装饰器访问内容调用方式
实例方法实例属性(self对象调用
类方法@classmethod类属性(cls类或对象调用
静态方法@staticmethod无需访问类或实例类调用

📘 案例

class Demo:count = 0  # 类属性def __init__(self):Demo.count += 1def instance_method(self):print("实例方法被调用")@classmethoddef class_method(cls):print("类方法被调用,当前对象数:", cls.count)@staticmethoddef static_method():print("静态方法被调用")d = Demo()
d.instance_method()
Demo.class_method()
Demo.static_method()

🧾 输出

实例方法被调用
类方法被调用,当前对象数: 1
静态方法被调用

在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。

六、封装

封装是指 隐藏内部实现细节,只暴露接口
在 Python 中用 下划线命名规则 实现伪私有属性。

命名方式含义
name公有(可访问)
_name受保护(不建议外部直接访问)
__name私有属性(类外无法直接访问)

📘案例

class Account:def __init__(self, owner, balance):self.owner = ownerself.__balance = balance  # 私有属性def deposit(self, amount):self.__balance += amountdef show_balance(self):print(f"当前余额: {self.__balance}")acc = Account("张三", 100)
acc.deposit(50)
acc.show_balance()# 不能直接访问私有属性
# print(acc.__balance)  # 报错

🧾 输出

当前余额: 150

七、继承

子类继承父类属性和方法,可以重用代码。

📘 语法

class 子类(父类):pass

📘 案例

class Person:def __init__(self, name):self.name = namedef say(self):print(f"{self.name} 在说话")class Student(Person):def study(self):print(f"{self.name} 正在学习")stu = Student("李四")
stu.say()
stu.study()

🧾 输出

李四 在说话
李四 正在学习

八、方法重写

子类可以重写父类方法来改变行为。

📘 案例

class Person:def say(self):print("我是一个人")class Student(Person):def say(self):print("我是学生")p = Person()
s = Student()
p.say()
s.say()

🧾 输出

我是一个人
我是学生

九、super() 调用父类方法

📘 案例

class Animal:def __init__(self, name):self.name = namedef speak(self):print(f"{self.name} 叫了一声")class Dog(Animal):def __init__(self, name, breed):super().__init__(name)  # 调用父类构造self.breed = breeddef speak(self):super().speak()  # 调用父类方法print(f"{self.name} 汪汪叫")dog = Dog("小黑", "拉布拉多")
dog.speak()

🧾 输出

小黑 叫了一声
小黑 汪汪叫

十、多态

不同对象对同一方法调用表现出不同行为。

📘 案例

class Animal:def speak(self):passclass Cat(Animal):def speak(self):print("喵喵")class Dog(Animal):def speak(self):print("汪汪")animals = [Cat(), Dog()]
for a in animals:a.speak()

🧾 输出

喵喵
汪汪

十一、特殊方法

方法说明示例
__init__构造函数初始化对象
__str__转字符串print(obj) 输出
__len__返回长度len(obj)
__add__定义 + 行为obj1 + obj2
__eq__定义 == 行为比较对象相等性

📘 案例

class Book:def __init__(self, title, pages):self.title = titleself.pages = pagesdef __str__(self):return f"《{self.title}》共{self.pages}页"def __len__(self):return self.pagesbook = Book("Python入门", 350)
print(book)
print("页数:", len(book))

🧾 输出

《Python入门》共350页
页数: 350

十二、综合案例:学生管理系统

📘 案例

class Student:def __init__(self, name, sid, score):self.name = nameself.sid = sidself.score = scoredef show(self):print(f"{self.sid} - {self.name} - {self.score}分")class StudentManager:def __init__(self):self.students = []def add_student(self, stu):self.students.append(stu)print(f"添加成功:{stu.name}")def show_all(self):print("学生列表:")for s in self.students:s.show()def get_average(self):if not self.students:return 0avg = sum([s.score for s in self.students]) / len(self.students)print(f"平均分:{avg:.2f}")# 使用
manager = StudentManager()
manager.add_student(Student("张三", "S001", 89))
manager.add_student(Student("李四", "S002", 95))
manager.show_all()
manager.get_average()

🧾 输出

添加成功:张三
添加成功:李四
学生列表:
S001 - 张三 - 89分
S002 - 李四 - 95分
平均分:92.00

十三、总结表格

概念关键词功能
class定义对象模板
对象实例类的实际存在
构造函数__init__初始化属性
封装_var, __var隐藏内部实现
继承class A(B)代码复用
多态同一接口不同实现提高灵活性
类方法@classmethod操作类属性
静态方法@staticmethod工具型函数
魔法方法__xxx__定义特殊行为

python学习专栏导航
(1)100天python从入门到拿捏《Python 3简介》
(2)100天python从入门到拿捏《python应用前景》
(3)100天python从入门到拿捏《数据类型》
(4)100天python从入门到拿捏《运算符》
(5)100天python从入门到拿捏《流程控制语句》
(6)100天python从入门到拿捏《推导式》
(7)100天python从入门到拿捏《迭代器和生成器》
(8)100天python从入门到拿捏《函数和匿名函数》
(9)100天python从入门到拿捏《装饰器》
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
(11)100天python从入门到拿捏《模块》
(12)100天python从入门到拿捏《文件操作》
(13)100天python从入门到拿捏《目录操作》
(14)100天python从入门到拿捏《Python的错误与异常机制》

http://www.dtcms.com/a/470518.html

相关文章:

  • Spring AI Alibaba 与 Ollama 集成初探:从环境搭建到首次调用
  • 营销型网站的标准网站flash导入页
  • 汉中专业网站建设开发怎么上国外网站
  • Windows上离线安装 PostgreSQL
  • MySQL——表的操作
  • langchain官网翻译:Build a Question/Answering system over SQL data
  • 我的HarmonyOS百宝箱
  • 广州十大室内设计公司排名网站推广seo教程
  • h5网站用什么软件做网站域名备案证书下载
  • 南京本地网站有哪些做网页需要什么
  • 机器学习破解生命之谜:内在无序蛋白质设计迎来革命性突破
  • Springboot之常用注解
  • 从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 14--二次开发--封装公共方法 2
  • 做平面的公司网站DNF做钓鱼网站
  • SpringBoot 集成 LangChain4j RAG Redis
  • 【QT】customPlot 设置图例透明背景和文字颜色
  • AT指令解析:ring_buffer、信号量、互斥量等基础知识
  • 任务网站(做任务学技能的)潍坊市建设局网站
  • 【算法】——动态规划之路径问题
  • 阿里云企业建站教程泰州东方医院
  • 东阿县住房和城乡建设局网站申请做版主 再什么网站
  • 深入理解数据在内存中的存储:整数与浮点数的二进制表示
  • 广东网站营销seo费用品牌推广活动有哪些
  • 特效音网站建设公司官网制作平台
  • MySQL数据库安装后,如何设置自动化备份策略?
  • 【开题答辩全过程】以 保险业务信息管理系统为例,包含答辩的问题和答案
  • 进口食品销售销售在那个网站做seo托管
  • 公司模板网站建设成绩查询系统网站开发
  • 建设大淘客网站雅布设计师
  • Oracle ADRCI工具全面使用指南:从基础到故障诊断实战