python学习笔记 |10.1、面向对象编程-类和实例

一、先搞懂:什么是类?什么是实例?

1. 一句话定义

  • 类(Class)抽象模板,比如「学生」
  • 实例(Instance)具体对象,比如「小明」「小红」

举个生活例子:

  • 类 = 「手机」(模板,不是真手机)
  • 实例 = 「你的 iPhone」「妈妈的安卓机」(真真实实的对象)

2. Python 怎么定义类?

class 关键字,固定格式:

复制代码
# 定义一个学生类(模板)
class Student(object):
    pass
  • Student:类名(大写开头)
  • (object):固定写法,表示继承(不用深究,照着写就行)
  • pass:空占位,先定义个空类

3. 怎么创建实例?

类名 + 括号 ()

复制代码
# 创建一个具体的学生:bart
bart = Student()

# 再创建一个学生:lisa
lisa = Student()

👉 bart 和 lisa 就是两个独立的实例!


二、给实例绑定属性(名字、分数)

实例可以自由加属性,非常灵活:

复制代码
bart = Student()
# 给 bart 绑定名字和分数
bart.name = "Bart Simpson"
bart.score = 59

print(bart.name)   # 输出:Bart Simpson
print(bart.score)  # 输出:59

三、超级重要:init 初始化方法

1. 作用

创建实例时自动绑定属性,不用手动一个个加。

2. 固定写法(必须背会)

复制代码
class Student(object):
    # 初始化方法:前后两个下划线!!
    def __init__(self, name, score):
        # 把参数绑定到实例自身
        self.name = name
        self.score = score

3. 关键点

  1. __init__ 前后必须两个下划线
  2. 第一个参数永远是 self(代表实例自己)
  3. 创建实例时,不用传 self,只传后面的参数

4. 使用示例

复制代码
# 直接传 name 和 score,自动绑定
bart = Student("Bart Simpson", 59)

print(bart.name)   # Bart Simpson
print(bart.score)  # 59

四、数据封装:把函数放进类里(方法)

1. 什么是封装?

数据 + 操作数据的函数,都放进类里,外部直接调用,不用管内部怎么实现。

2. 定义类的方法

和普通函数一样,第一个参数必须是 self

复制代码
class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score

    # 封装:打印成绩
    def print_score(self):
        print(f"{self.name}: {self.score}")

    # 封装:判断等级
    def get_grade(self):
        if self.score >= 90:
            return "A"
        elif self.score >= 60:
            return "B"
        else:
            return "C"

3. 调用方法(超级简单)

复制代码
bart = Student("Bart", 59)
lisa = Student("Lisa", 99)

bart.print_score()    # 输出:Bart: 59
print(bart.get_grade()) # 输出:C
print(lisa.get_grade()) # 输出:A

五、必记 3 个小结

  1. 类是模板,实例是具体对象
  2. __init__(self, ...) 初始化属性,self 必须写第一个
  3. 类里的函数叫方法 ,调用时 实例.方法(),不用传 self

练习题(入门级,带答案)

练习题 1:定义类 + 创建实例

定义一个 Person 类,包含 nameage 属性,创建一个实例 zhangsan,名字张三,年龄 20,打印他的名字和年龄。

复制代码
#代码 豆包
class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

zhangsan = Person("张三", 20)
print(zhangsan.name)
print(zhangsan.age)

#代码 自己写
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def print_info(self):
        print('名字是',self.name)
        print('年龄是',self.age)

person1=Person('张三',20) #age不能加引号 因为age不是字符串
person1.print_info()

练习题 2:给类加方法

给上面的 Person 类加一个方法 introduce(),输出:我叫XX,今年XX岁

复制代码
#代码 豆包
class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print(f"我叫{self.name},今年{self.age}岁")

zhangsan = Person("张三", 20)
zhangsan.introduce()

#代码 自己写
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def print_info(self):
        print('名字是',self.name)
        print('年龄是',self.age)
    def introduce(self):
        print('我叫',self.name,',今年',self.age,'岁')


person1=Person('张三',20) #age不能加引号 因为age不是字符串
person1.print_info()
person1.introduce()

练习题 3:综合练习(必做)

定义一个 Dog 类:

  1. 属性:名字 name,品种 breed
  2. 方法:bark(),输出 汪汪汪!我是XX(品种)XX(名字)

创建一只金毛「旺财」,调用 bark()

复制代码
#代码 豆包
class Dog(object):
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    def bark(self):
        print(f"汪汪汪!我是{self.breed}{self.name}")

wangcai = Dog("旺财", "金毛")
wangcai.bark()

#代码 自己写
class Dog:
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed
    def bark(self):
        print('汪汪汪!','我是',self.breed,self.name)

dog1=Dog('旺财','金毛犬')
dog1.bark()

总结

  1. 类 = 模板,实例 = 具体对象
  2. __init__(self, ...) 用来初始化属性,self 是固定第一个参数
  3. 类里的函数叫方法,封装数据和逻辑,外部直接调用
  4. 实例之间数据独立,互不影响

=分割线=

相关推荐
王小王-1238 分钟前
基于Python的车联网数据聚合与可视化分析平台设计与实现
python·车联网·新能源汽车·车联网聚合分析
2501_9381768826 分钟前
924期权赚了2000倍真的吗?
笔记
yzqy_30 分钟前
AMD AI 开发者计划学习笔记:从 ROCm 到 Ryzen AI,理解 AMD 的 AI 开发生态
人工智能·笔记·学习·datawhale·amdev
叫我:松哥34 分钟前
基于Flask框架的校园二手书籍交易平台,注重校园场景的特殊需求,通过学号认证保障用户真实性
后端·python·sqlite·flask·bootstrap
namexingyun1 小时前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
疯狂打码的少年1 小时前
【程序语言与编译】正规式与有限自动机的等价转换
笔记
通信仿真爱好者1 小时前
第【17】期--考虑硬件损伤和不完美CSI的RIS-MISO系统的深度强化学习联合优化-python完整代码+参考文献
python·深度强化学习·ris
是上好佳佳佳呀1 小时前
【LangChain|Day03】LangChain 链式调用 Chains 笔记
笔记·langchain
装不满的克莱因瓶1 小时前
自然语言处理常见任务——从文本理解到生成式AI的完整任务体系
人工智能·pytorch·python·深度学习·ai·自然语言处理
ptc学习者1 小时前
python 中描述符@property property 大概的样子
开发语言·python