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

Python入门Day15:面向对象进阶(类变量,继承,封装,多态)

学习目标:

  • 掌握类变量与实例变量的区别
  • 学会类方法与静态方法的使用
  • 理解继承的基本语法与方法重写
  • 初步理解封装和多态的含义与应用

一、类变量 vs 实例变量 

1.实例变量(每个对象独有)

class Person:def __init__(self,name):self.name = name #实例变量p1 = Person("Alice")
p2 = Person("Bob")
print(p1.name)    #Alice
print(p2,name)    #Bob

2.类变量(所有对象共享)

class Person:count = 0 # 类变量(统计总人数)def __init__(self.name):self.name = namePerson.count += 1print(Person.count)   # 0
p1 = Person("A")
p2 = Person("B")
print(Person.count)   # 2

二、类方法和静态方法

1.类方法(@classmethod)

  • 第一个参数是cls,表示类本身
  • 可用于操作类变量,创建工厂方法等
class Person:count = 0def __init__(self,name):self.name = namePerson.count += 1@classmethoddef get_count(cls):return cls.countprint(Person.get_count())  # 输出:0
p1 = Person("Tom")
print(Person.get_count())  # 输出:1

2.静态方法(@staticmethod)

  • 不需要self或cls,想普通函数,但属于类组织的一部分
class MathTool:@staticmethoddef add(a,b):return a+bprint(MathTool.add(3,5))   # 输出:8

三、继承(Inheritance)

一个类可以继承另一个类的属性和方法,形成“父类-子类”结构。

class Animal:def speak(self):print("动物叫")class Dog(Animal):def bark(self):print("狗叫:汪汪")d = Dog()
d.speak()   #继承自Animal
d.bark()    #Dog自己的方法

四、封装(Encapsulation)

通过访问控制限制外部访问对象的内部实现。

私有属性与方法(用__开头)

class Account:def __init__(self,owner,balance):self.owner = ownerself.__balance = balance    #私有属性def deposit(self,amount):if amount > 0:self.__balance += amountdef get_balance(self):return self.__balanceacc = Account("Tom",1000)
acc.deposit(500)
print(acc.get_balance())    #输出:1500

五、多态(Polymorphism)

不同类对象调用相同方法,呈现不同行为(统一接口,多种实现)

class Animal:def speak(self):passclass Dog(Animal):def speak(self):print("汪汪")class Cat(Animal):def speak(self):print("喵喵")def make_sound(animal):animal.speak()make_sound(Dog())    #汪汪
make_sound(Cat())    #喵喵

http://www.lryc.cn/news/610546.html

相关文章:

  • springboot + maven 使用资源占位符实现动态加载配置文件
  • Modstart 请求出现 Access to XMLHttpRequest at ‘xx‘
  • imx6ull-驱动开发篇9——设备树下的 LED 驱动实验
  • ubuntu的压缩工具zip的安装和使用
  • 【C++】类和对象1
  • 力扣106:从中序与后序遍历序列构造二叉树
  • 「PromptPilot 大模型智能提示词平台」—— PromptPilot × 豆包大模型 1.6:客户投诉邮件高效回复智能提示词解决方案
  • 工业级 CAN 与以太网桥梁:串口服务器CAN通讯转换器深度解析(上)
  • 【科研绘图系列】R语言绘制误差棒图
  • 姜 第四章 线性方程组
  • shmget等共享内存系统调用及示例
  • uniapp 类似popover气泡下拉框组件
  • Maven和Gradle在构建项目上的区别
  • uniapp Android App集成支付宝的扫码组件mPaaS
  • Linux驱动25 --- RkMedia音频API使用增加 USB 音视频设备
  • Linux驱动24 --- RkMedia 视频 API 使用
  • 技术文章推荐|解析 ESA 零售交易方案(技术分析+案例拆解)
  • 基于k8s环境下的pulsar常用命令(下)
  • JavaWeb02——基础标签及样式(黑马视频笔记)
  • 203.移除链表元素 707.设计链表 206.反转链表
  • 8.5 位|归并|递归
  • 腾讯云CodeBuddy AI IDE+CloudBase AI ToolKit打造理财小助手网页
  • C++ - 基于多设计模式下的同步异步日志系统(11w字)
  • 使用ProxySql实现MySQL的读写分离
  • 【模电笔记】—— 直流稳压电源——整流、滤波电路
  • C++返回值优化(RVO):高效返回对象的艺术
  • LINUX 85 SHElL if else 前瞻 实例
  • 解锁n8n:开启自动化工作流的无限可能
  • 数据挖掘,到底是在挖掘什么?
  • Leetcode-2080区间内查询数字的频率