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

Python 面向对象编程基础:类与对象初体验

面向对象编程(OOP)是一种编程范式,它通过对象和类的概念来组织代码,使程序更加模块化、可维护和可扩展。Python 是一种支持面向对象编程的语言,提供了强大的类和对象机制。今天,就让我们一起学习 Python 中的面向对象编程基础,从类和对象的定义到基本用法,开启你的 OOP 之旅。

一、类(Class)与对象(Object)

(一)什么是类?

类是一种抽象的数据类型,它定义了一组具有相同属性和方法的对象的结构。类可以看作是一个模板,用于创建对象。

(二)什么是对象?

对象是类的实例,它是类的具体实现。每个对象都有自己的属性和方法,这些属性和方法由类定义。

二、定义类

在 Python 中,使用 class 关键字定义类。

(一)定义一个简单的类

class Person:def __init__(self, name, age):self.name = nameself.age = agedef greet(self):print(f"Hello, my name is {self.name} and I am {self.age} years old.")

(二)解释

  • __init__ 方法:这是一个特殊的方法,称为构造函数。它在创建对象时自动调用,用于初始化对象的属性。
  • self 参数self 是一个指向当前对象的引用,用于访问对象的属性和方法。

三、创建对象

通过类创建对象的过程称为实例化。

(一)创建对象

# 创建一个 Person 类的实例
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)# 调用对象的方法
person1.greet()  # 输出 "Hello, my name is Alice and I am 25 years old."
person2.greet()  # 输出 "Hello, my name is Bob and I am 30 years old."

(二)访问对象的属性

print(person1.name)  # 输出 "Alice"
print(person2.age)   # 输出 30

四、类属性与实例属性

(一)类属性

类属性是属于类的属性,所有实例共享。

class Person:species = "Homo sapiens"  # 类属性def __init__(self, name, age):self.name = nameself.age = agedef greet(self):print(f"Hello, my name is {self.name} and I am {self.age} years old.")# 访问类属性
print(Person.species)  # 输出 "Homo sapiens"# 创建实例
person1 = Person("Alice", 25)
print(person1.species)  # 输出 "Homo sapiens"

(二)实例属性

实例属性是属于每个实例的属性,每个实例都有自己的独立副本。

person1.name = "Alice Smith"
print(person1.name)  # 输出 "Alice Smith"

五、方法

(一)实例方法

实例方法是类中定义的普通方法,第一个参数总是 self,用于访问实例的属性和方法OpenSpeedy。

class Person:def __init__(self, name, age):self.name = nameself.age = agedef greet(self):print(f"Hello, my name is {self.name} and I am {self.age} years old.")

(二)类方法

类方法的第一个参数是类本身,通常命名为 cls。类方法可以通过类名或实例调用。

class Person:count = 0  # 类属性def __init__(self, name, age):self.name = nameself.age = agePerson.count += 1@classmethoddef get_count(cls):return cls.countprint(Person.get_count())  # 输出 0
person1 = Person("Alice", 25)
print(Person.get_count())  # 输出 1

(三)静态方法

静态方法不接收 selfcls 参数,它们就像普通函数一样,但属于类的命名空间。

class Person:def __init__(self, name, age):self.name = nameself.age = age@staticmethoddef is_adult(age):return age >= 18print(Person.is_adult(25))  # 输出 True

六、继承

继承是面向对象编程中的一个重要概念,它允许一个类继承另一个类的属性和方法ScribeHow。

(一)定义父类和子类

class Animal:def __init__(self, name):self.name = namedef speak(self):passclass Dog(Animal):def speak(self):return f"{self.name} says Woof!"class Cat(Animal):def speak(self):return f"{self.name} says Meow!"

(二)使用继承

dog = Dog("Buddy")
cat = Cat("Whiskers")print(dog.speak())  # 输出 "Buddy says Woof!"
print(cat.speak())  # 输出 "Whiskers says Meow!"

七、多态

多态允许不同的类具有相同名称的方法,但具体实现不同。

def animal_speak(animal):print(animal.speak())animal_speak(dog)  # 输出 "Buddy says Woof!"
animal_speak(cat)  # 输出 "Whiskers says Meow!"

八、封装

封装是将对象的属性和方法封装在一起,隐藏内部实现细节,只暴露必要的接口KMSCX激活。

class Person:def __init__(self, name, age):self._name = name  # 使用单下划线表示受保护的属性self.__age = age   # 使用双下划线表示私有属性def get_age(self):return self.__agedef set_age(self, age):if age > 0:self.__age = ageperson = Person("Alice", 25)
print(person.get_age())  # 输出 25
person.set_age(30)
print(person.get_age())  # 输出 30

九、总结

通过本文的介绍,你已经掌握了 Python 中面向对象编程的基础知识,包括类和对象的定义、属性和方法的使用、继承、多态和封装。以下是关键点总结:

  • :定义了一组具有相同属性和方法的对象的结构。
  • 对象:类的实例,具有自己的属性和方法。
  • 类属性:属于类的属性,所有实例共享。
  • 实例属性:属于每个实例的属性,每个实例都有自己的独立副本。
  • 实例方法:类中定义的普通方法,第一个参数是 self
  • 类方法:第一个参数是类本身,通常命名为 cls
  • 静态方法:不接收 selfcls 参数,属于类的命名空间。
  • 继承:一个类可以继承另一个类的属性和方法。
  • 多态:不同的类可以具有相同名称的方法,但具体实现不同。
  • 封装:将对象的属性和方法封装在一起,隐藏内部实现细节。
http://www.zskr.cn/news/13915.html

相关文章:

  • Drools 7.0基础环境搭建
  • 基于微信小程序的旅游景点体系【2026最新】
  • 反电动势法控制BLDC电机的原理图分析
  • 2025内网聊天工具排行 4款好用的内网聊天软件推荐
  • 方言普通话识别大模型,支撑中英+202种方言识别
  • BLE从机(20)BLE区分主机(IOS/安卓/WIN)
  • Gitee:中国开发者生态的数字化转型加速器
  • 大模型提示词技巧Prompt Engineering,看这一篇就够了 - 知乎
  • Pandawiki接入飞书机器人全攻略:打造企业智能问答新体验
  • WPF 深入系列.2.布局体系.布局控件.StackPanel
  • 快速查看Navicat数据库连接密码实战
  • 老旧系统接入统一认证
  • 大内容 Python动漫信息管理系统 Django+Echarts 类型饼图 折线图分析 后台管理 智能推荐(源码)✅
  • 深入解析:从“硬件能力比拼”到“生活价值交付”,方太智慧厨房重构行业竞争内核
  • 【AI 哲学思考】从大模型演进到生命隐喻:个性、极限与先天后天之问
  • 【AI 哲学思考】记忆的形态:从人脑到 AI 的存储之问
  • ISP DMA TEST
  • 洛谷题单指南-进阶数论-P5091 【模板】扩展欧拉定理
  • RAG is really dead? 大模型和知识之间的桥梁没了? - spader
  • 在 Unity 中运用 SoundTouch 插件控制音频倍速播放
  • 基于 SciPy 的矩阵运算与线性代数应用详解 - 详解
  • sway - wayland下截图方案
  • 科学史笔记
  • 2025 年真空泵品牌最新权威推荐排行榜:覆盖真空泵维修,真空泵机组,真空泵油,真空泵配件领域选择指南
  • InnoDB ReplicaSet和其他数据库高可用方案有什么区别?
  • 完整教程:南华 NHJX-13 型底盘间隙仪:机动车底盘安全检测的核心设备
  • vue3使用路由配置
  • 个人行业选择
  • C语言的指针与cpp的引用
  • 进程互斥的硬件实现方式(比较难懂的一节课,但是我搞懂了)