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

寒假学习笔记1.30

一、学习目标
理解面向对象编程的核心概念(类、对象、属性、方法)

掌握类的定义与实例化

学会使用构造函数__init__()初始化对象

理解封装、继承、多态的基本思想

能够编写简单的面向对象程序

二、学习内容

  1. 类与对象的基本概念
    类(Class):抽象的概念,是对象的蓝图或模板

对象(Object):具体的实例,是类的具体化

属性(Attribute):对象拥有的特征数据

方法(Method):对象能够执行的操作

生活类比:

类 = 汽车设计图纸

对象 = 根据图纸制造出来的具体汽车

属性 = 颜色、品牌、排量

方法 = 启动、加速、刹车

  1. 定义第一个类
    python

使用 class 关键字定义类

class Student:
"""学生类(文档字符串)"""
# 类属性(所有实例共享)
school = "第一中学"

# 实例方法
def study(self):print(f"{self.name}正在学习...")

创建对象(实例化)

stu1 = Student()
stu1.name = "小明" # 动态添加实例属性(不推荐)
stu1.study() # 输出:小明正在学习...
3. 构造函数 init()
作用:在创建对象时自动调用,用于初始化实例属性

python
class Student:
school = "第一中学" # 类属性

def __init__(self, name, age, score):"""构造函数,self指向当前创建的实例"""self.name = name    # 实例属性self.age = ageself.score = scoredef introduce(self):print(f"我叫{self.name},今年{self.age}岁")def get_grade(self):if self.score >= 90:return 'A'elif self.score >= 80:return 'B'elif self.score >= 60:return 'C'else:return 'D'

实例化时自动调用__init__

stu2 = Student("小红", 18, 95)
print(stu2.name) # 小红
print(stu2.school) # 第一中学(通过实例访问类属性)
stu2.introduce() # 我叫小红,今年18岁
self 参数:

必须作为实例方法的第一个参数

代表实例本身,调用时自动传递

名称不强制为self,但强烈建议遵守约定

  1. 实例属性与类属性
    python
    class Dog:

    类属性(所有狗共有的特征)

    species = "Canis familiaris"

    def init(self, name, age):
    # 实例属性(每只狗独有的特征)
    self.name = name
    self.age = age

dog1 = Dog("旺财", 3)
dog2 = Dog("来福", 5)

访问类属性

print(Dog.species) # 通过类访问
print(dog1.species) # 通过实例访问(向上查找)

修改类属性

Dog.species = "犬科动物"
print(dog2.species) # 犬科动物

实例属性修改只影响当前实例

dog1.age = 4
print(dog1.age) # 4
print(dog2.age) # 5
5. 方法类型
实例方法:第一个参数为self,可访问实例属性和类属性

类方法:使用@classmethod装饰,第一个参数为cls,可访问类属性

静态方法:使用@staticmethod装饰,无特殊参数,类似普通函数

python
class Calculator:
brand = "MyCalc"

def __init__(self, model):self.model = model# 实例方法
def add(self, a, b):return a + b# 类方法
@classmethod
def get_brand(cls):return cls.brand# 静态方法
@staticmethod
def info():print("这是一个计算器类")

calc = Calculator("X100")
print(calc.add(3, 5)) # 8
print(Calculator.get_brand()) # MyCalc
Calculator.info() # 这是一个计算器类
6. 封装(Encapsulation)
将数据和方法包装在类内部

通过访问控制隐藏内部细节

Python中约定用_表示“受保护”,__表示“私有”

python
class BankAccount:
def init(self, owner, balance):
self.owner = owner # 公开属性
self._password = "123456" # 受保护(约定不能直接访问)
self.__balance = balance # 私有属性(名称改编为 _BankAccount__balance)

# 提供公开方法来操作私有属性
def deposit(self, amount):if amount > 0:self.__balance += amountdef withdraw(self, amount):if 0 < amount <= self.__balance:self.__balance -= amountdef get_balance(self):return self.__balance

account = BankAccount("张三", 1000)

print(account.__balance) # 报错!不能直接访问私有属性

print(account.get_balance()) # 1000
print(account._BankAccount__balance) # 可以通过名称改编访问(不推荐)
7. 继承(Inheritance)
子类继承父类的属性和方法

支持单继承,可通过多重继承实现多继承

方法重写(Override)

python

父类

class Animal:
def init(self, name):
self.name = name

def speak(self):print(f"{self.name}发出声音")

子类

class Dog(Animal):
# 重写父类方法
def speak(self):
print(f"{self.name}汪汪叫")

# 子类特有方法
def wag_tail(self):print(f"{self.name}摇尾巴")

class Cat(Animal):
def speak(self):
print(f"{self.name}喵喵叫")

使用继承

dog = Dog("旺财")
cat = Cat("咪咪")
dog.speak() # 旺财汪汪叫
cat.speak() # 咪咪喵喵叫
dog.wag_tail() # 旺财摇尾巴
super() 调用父类方法:

python
class Student:
def init(self, name, age):
self.name = name
self.age = age

class CollegeStudent(Student):
def init(self, name, age, major):
# 调用父类构造函数
super().init(name, age)
self.major = major

def info(self):print(f"{self.name},{self.age}岁,专业:{self.major}")

cs = CollegeStudent("李华", 20, "计算机")
cs.info()
8. 多态(Polymorphism)
同一操作作用于不同对象,产生不同结果

基于继承和方法重写实现

python
def animal_speak(animal):
"""统一接口,接收任何Animal子类对象"""
animal.speak()

animals = [Dog("旺财"), Cat("咪咪"), Dog("来福")]
for animal in animals:
animal_speak(animal) # 分别输出各自的叫声

http://www.jsqmd.com/news/379623/

相关文章:

  • 探索 Java 中的新 HTTP 客户端
  • P2698 [USACO12MAR] Flowerpot S
  • 中国移动(600941)价值投资深度研究报告 2026.2.13
  • 免费,在线pdf转jpg的链接。
  • 深入解析:Android平板备份到计算机
  • Winter Vacation 2026 - -Klsw
  • 小程序环境+基础页面
  • 三维点云处理技术和深度学习在点云处理中的应用-02:三维点云表征概述
  • 信息论与编码篇---N次拓展信道
  • 信息论与编码篇---积信道
  • 信息论与编码篇---可逆矩阵信道
  • Spark大数据处理:技术、应用与性能优化【1.2】
  • 有限元模型可视化:两套独立Python代码实现带载荷与纯几何对比
  • 6个提示词,能把混乱的剪辑变成专业策略
  • 26.2.12
  • 完整教程:leetcode算法(112.路径总和)
  • 使用Qwen Code的Skills能力重塑工作流 - yi
  • 大数据ETL工具比较:Sqoop vs Flume vs Kafka
  • Django 中间件
  • temperature定义与使用
  • Google API 教程
  • AI编程工具在高可用架构设计中的应用:从故障注入到灾备方案生成实战
  • 视频转换器HD Video Converter Factory 28.6 便携版
  • XML Schema 复合空元素
  • 2001-2024年上市公司媒体关注度数据+Stata代码
  • 必看!2026年琼海海鲜推荐榜单,探索高性价比家庭聚餐海鲜店与知名夜宵选择
  • 企业AI伦理准则制定中的跨部门协作:AI应用架构师的协调技巧
  • 6大方法教你禁止windows11自动更新,windows自动更新怎么关闭,有效阻止关闭win11更新
  • 把Kindle变成电子表!
  • Turnitin AI率爆表怎么办?揭秘网易有道“学术猹”的官方解决方案 - 品牌观察员小捷