深入讲解 Python 中的类与对象

Python类与对象详解 阅读详情

深入讲解 Python 中的类与对象

一、基本概念
  1. 类(Class)
    类是对象的蓝图,定义了对象的属性和方法。
    语法:class ClassName:
    示例:

    class Dog:
        pass  # 最简单的空类
    
  2. 对象(Object)
    对象是类的实例化产物,具有类定义的属性和行为。
    示例:

    my_dog = Dog()  # 创建 Dog 类的实例
    

二、类核心要素详解
  1. 构造函数 __init__
    用于初始化对象属性,创建对象时自动调用。

    class Dog:
        def __init__(self, name, age):
            self.name = name  # 实例属性
            self.age = age
    
    my_dog = Dog("Buddy", 3)
    print(my_dog.name)  # 输出: Buddy
    
  2. 实例方法
    定义在类中的函数,第一个参数必须是 self(指向实例自身)。

    class Dog:
        def bark(self):
            print(f"{self.name} says: Woof!")
    
    my_dog.bark()  # 输出: Buddy says: Woof!
    
  3. 类属性与实例属性

    类型定义位置访问方式特点
    类属性类内部(方法外)ClassName.attr所有实例共享
    实例属性__init__ 或方法中self.attr每个实例独立

    示例:

    class Dog:
        species = "Canis lupus"  # 类属性
        def __init__(self, name):
            self.name = name      # 实例属性
    
    print(Dog.species)  # 输出: Canis lupus
    

三、面向对象三大特性
  1. 封装(Encapsulation)

    • 隐藏内部实现细节,通过方法暴露操作接口
    • 使用单下划线 _var 约定私有属性(Python 无严格私有机制)
    class BankAccount:
        def __init__(self):
            self._balance = 0  # "私有"属性
        
        def deposit(self, amount):
            self._balance += amount
        
        def get_balance(self):
            return self._balance
    
  2. 继承(Inheritance)
    子类继承父类的属性和方法,支持多继承。

    class Animal:
        def __init__(self, name):
            self.name = name
        
        def speak(self):
            raise NotImplementedError("子类必须实现此方法")
    
    class Cat(Animal):
        def speak(self):
            return "Meow!"
    
    class Dog(Animal):
        def speak(self):
            return "Woof!"
    
  3. 多态(Polymorphism)
    不同子类对同一方法的不同实现。

    animals = [Cat("Whiskers"), Dog("Buddy")]
    for animal in animals:
        print(animal.speak())
    # 输出:
    # Meow!
    # Woof!
    

四、高级特性
  1. 类方法与静态方法

    类型装饰器第一个参数典型用途
    实例方法无self操作实例属性
    类方法@classmethodcls操作类属性或创建工厂方法
    静态方法@staticmethod无工具函数

    示例:

    class Pizza:
        def __init__(self, ingredients):
            self.ingredients = ingredients
        
        @classmethod
        def margherita(cls):
            return cls(["tomato", "mozzarella"])
        
        @staticmethod
        def validate_ingredients(ingredients):
            return "tomato" in ingredients
    
  2. 特殊方法(Magic Methods)
    通过实现特殊方法自定义对象行为。

    class Vector:
        def __init__(self, x, y):
            self.x = x
            self.y = y
        
        def __add__(self, other):
            return Vector(self.x + other.x, self.y + other.y)
        
        def __str__(self):
            return f"Vector({self.x}, {self.y})"
    
    v1 = Vector(2, 3)
    v2 = Vector(1, 4)
    print(v1 + v2)  # 输出: Vector(3, 7)
    
  3. 属性装饰器 @property
    控制属性的访问和修改。

    class Circle:
        def __init__(self, radius):
            self._radius = radius
        
        @property
        def radius(self):
            return self._radius
        
        @radius.setter
        def radius(self, value):
            if value <= 0:
                raise ValueError("半径必须为正数")
            self._radius = value
    

五、继承进阶
  1. 方法重写(Override)

    class Parent:
        def show(self):
            print("Parent method")
    
    class Child(Parent):
        def show(self):
            super().show()  # 调用父类方法
            print("Child method")
    
  2. 多继承与 MRO
    Python 使用 C3 算法确定方法解析顺序。

    class A:
        def do(self):
            print("A")
    
    class B(A):
        def do(self):
            print("B")
    
    class C(A):
        def do(self):
            print("C")
    
    class D(B, C):
        pass
    
    d = D()
    d.do()  # 输出: B
    print(D.__mro__)  # 查看继承顺序
    

六、最佳实践
  1. 组合优于继承
    优先使用对象组合而非类继承来实现代码复用。

    class Engine:
        def start(self):
            print("Engine started")
    
    class Car:
        def __init__(self):
            self.engine = Engine()
        
        def start(self):
            self.engine.start()
    
  2. 遵循 SOLID 原则

    • 单一职责原则(SRP)
    • 开放封闭原则(OCP)
    • 里氏替换原则(LSP)
    • 接口隔离原则(ISP)
    • 依赖倒置原则(DIP)

七、常见问题与解决方案
  1. 可变默认参数陷阱

    # 错误示例
    class Test:
        def __init__(self, items=[]):  # 所有实例共享同一个列表
            self.items = items
    
    # 正确写法
    class Test:
        def __init__(self, items=None):
            self.items = items if items is not None else []
    
  2. 动态属性管理
    使用 __slots__ 优化内存占用:

    class Point:
        __slots__ = ('x', 'y')  # 限制允许的属性
        def __init__(self, x, y):
            self.x = x
            self.y = y
    

八、完整示例:游戏角色系统
class Character:
    MAX_HEALTH = 100

    def __init__(self, name, attack_power):
        self.name = name
        self.health = self.MAX_HEALTH
        self.attack_power = attack_power

    def attack(self, target):
        target.take_damage(self.attack_power)

    def take_damage(self, damage):
        self.health = max(0, self.health - damage)
        print(f"{self.name}受到 {damage} 点伤害,剩余生命值: {self.health}")

class Warrior(Character):
    def __init__(self, name):
        super().__init__(name, attack_power=15)
        self.shield = 10

    def take_damage(self, damage):
        actual_damage = max(0, damage - self.shield)
        super().take_damage(actual_damage)

class Mage(Character):
    def __init__(self, name):
        super().__init__(name, attack_power=20)
        self.mana = 100

    def cast_spell(self, target):
        if self.mana >= 30:
            target.take_damage(25)
            self.mana -= 30
        else:
            print("法力不足!")

# 使用示例
warrior = Warrior("Conan")
mage = Mage("Gandalf")

warrior.attack(mage)    # Gandalf受到 5 点伤害(15-10)
mage.cast_spell(warrior) # Conan受到 25 点伤害

总结

Python 的面向对象编程提供了强大的代码组织能力,通过合理使用类与对象可以实现:

  1. 逻辑模块化
  2. 代码复用
  3. 复杂系统建模

关键要点:

  • 明确区分类属性和实例属性
  • 合理使用继承与组合
  • 善用特殊方法实现 Pythonic 对象
  • 遵循面向对象设计原则
  • 注意 Python 特有的实现细节(如 self 参数、MRO 等)
python入门:面向对象编程——类与对象深度解析 面向对象编程(OOP)是Python的核心编程范式,通过类与对象的组织方式,能够高效管理复杂程序。本文将深入解析类与对象的核心机制,涵盖继承、多态、魔术方法等关键概念,助你写出更优雅、可维护的代码。"""学生类"""# 类属性(所有实例共享)school = "清华大学"# 初始化方法(构造函数)self.name = name # 实例属性# 实例方法print(f"{self.name}正在学习{course}")# 实例化对象stu1 = Student("张三", 20) 阅读详情

相关推荐

【python】一文读懂python类与对象

【python】一文读懂python类与对象

weixin_44502754的博客 1567

python 类与对象的详细用法

类的基本用法和实际案例,类的继承、类方法、静态方法

m0_61066945的博客 7616

【Python自动化测试13】类、对象、属性与方法知识讲解

一、前言   本文章主要讲解Python中异常介绍、捕获、处理相关知识点内容,为后续自动化测试框架搭建及日常维护做铺垫,下方有系列文章的传送门,感兴趣的小伙伴也可以前往查看,话不多说,让我们一起看看吧~

萌笑天的博客 2919

Python基础——类和对象

在 Python 中,类(Class)和对象(Object)是面向对象编程的核心概念。通过类和对象,可以组织和管理代码,使得代码更加模块化、可重用和易于维护。下面详细介绍类和对象的概念、定义方法和使用方法。

十二测试录 2844

Python的零基础超详细讲解(第十三天)-Python的类与对象

基础篇往期文章如下: Python的零基础超详细讲解(第一天)-Python简介以及下载 Python的零基础超详细讲解(第二天)-Python的基础语法1 Python的零基础超详细讲解(第三天)-Python的基础语法_ Python的零基础超详细讲解(第四天)-Python的数据类型_ Python的零基础超详细讲解(第五天)-Python的运算符_ 今天我们要学习的是 Python 中很重要的一个部分-面向对象。 它是我们后续趣味编程游戏课程的基础,也是整个 Python 学习的重中之

weixin_54556126的博客 627

Python中的类(Class)和对象(Object)

类是创建对象的模板。它定义了一个对象的属性和方法。属性是在对象中存储的数据,而方法是可以在对象上执行的操作。在Python中,使用class关键字定义类。def __init__(self): # 构造函数,在创建新对象时自动调用self.attribute = "Hello" # 属性定义def method(self): # 方法定义本文详细介绍了Python中的类(Class)和对象(Object)的概念和应用场景。类是对象的模板或蓝图,而对象是类的实例。

这家伙很懒,什么都没有留下 6933

python基础:类和对象

本文介绍了面向对象编程中类和对象的核心概念。类作为对象的抽象模板,通过class关键字定义,包含属性和方法。属性分为实例属性(通过__init__初始化)和类属性(类共享)。方法包括:实例方法(操作实例属性)、类方法(@classmethod修饰,操作类属性)、静态方法(@staticmethod修饰,工具函数)以及构造方法__new__。重点讲解了魔术方法(如__add__、__str__等)如何实现对象特殊行为,以及工厂模式的应用。文章通过具体代码示例,展示了如何定义类、创建对象及使用各类方法,体现了面

2301_82065950的博客 2536

用户和实体行为分析(UEBA)基础指南及解决方案

用户和实体行为分析(UEBA)或异常检测是一种网络安全技术,它使用机器学习(ML)算法来检测网络中用户、主机和其他实体的异常活动。

ITmoster的博客 2892

python中的类和对象的讲解

python中类和对象的讲解

adminstate的博客 252

MySQL 8.0数据库崩了别慌!手把手教你仅凭一个.ibd文件找回数据(附Go工具包)

本文详细介绍了在MySQL 8.0数据库崩溃后,如何仅凭.ibd文件恢复数据的完整流程。通过使用Go语言工具包和ALTER TABLE技巧,即使没有备份也能实现数据重生。文章包含从环境准备到数据验证的全方位指导,帮助DBA和开发者应对紧急数据恢复场景。

weixin_29235923的博客 419

MobilenetV1、V2、V3系列详解

Mobilenet系列模型作为当前主流的端侧轻量级模型被广泛应用,很多算法都会使用其作为backbone提取特征,这一章对Mobilenet系列模型V1,V2,V3做一个总结。

turned的博客 1万+

python中的类和对象

python中的类和对象 一、面向对象大的思想 1.python基于哲学观点:万物皆对象, 一切皆对象 举例说明: 案例一:我想吃大盘鸡 面向过程----------------------面向对象 1.自己去买菜----------------1.委托一个人帮忙买菜 2.自己择菜-------------------2.委托一个人帮忙择菜 3.自己做菜-------------------3.委托一个人厨师做菜 4.自己吃----------------------4.自己吃 面向对象:类,对象,pyth

Lonely_Fishes的博客 561

Cadence Allegro新手避坑:从原理图到PCB,解决‘netrev.lst does not exist’的完整流程

本文详细介绍了Cadence Allegro从原理图设计到PCB导入网表的完整流程,特别针对新手常见的'netrev.lst does not exist'错误提供了系统解决方案。内容包括环境准备、原理图设计规范、网表生成与导入技巧,以及设计数据管理最佳实践,帮助工程师高效完成PCB设计任务。

weixin_42685438的博客 487

Python 的对象和类

在现实世界中,具体的实体被称为对象,观察这些对象的属性和行为,发现可以使用相同的特征去描述一类对象。对象属性和行为美国总统特朗普姓名、年龄、工作中国明星成龙姓名、年龄、工作上海中心大厦高度、业主、维护北京中信大厦高度、业主、维护可以使用 “姓名、年龄、工作” 等特征去描述特朗普和成龙这一类对象,使用 “高度、业主、维护” 等特征去描述上海中心大厦、北京中信大厦这一类对象。在编程领域,类是对一组具有相同属性和行为的对象的抽象。

1532

封装CTP API为Java SDK

本文介绍了在Windows环境下使用Java调用CTP API的编译实现过程。首先需要准备CTP API SDK、JDK、SWIG和Visual Studio等工具,配置好开发环境。然后通过搭建目录结构、编写SWIG接口文件ctp.i,实现C++到Java的代码转换。文中详细说明了文件目录组织方式,并提供了处理中文乱码的代码示例。通过这一系列步骤,最终将CTP的C++接口转换为Java可调用的形式,为Java项目获取期货实时报价数据提供支持。

weixin_43952815的博客 1222

3D LUT Color Conversion之总体架构设计之三

摘要:本文提出了一种基于三维坐标一维化寻址的四面体网格编码方法。通过定义全局网格坐标P(R,G,B)=R+9G+81B和局部增量(ξ,η,ζ)∈{0,1},推导出偏移量Δ(ξ,η,ζ)=ξ+9η+81ζ的平移不变性质。该方法将6种坐标排序情况(Case)对应的固定偏移量三元组预先存储,其中V0和V3的偏移量恒定为0和91。硬件实现时只需根据Case选择对应常量组,无需实时计算坐标,显著提高了处理效率。该方案利用线性寻址公式的特性,确保相同局部结构在不同位置具有一致的偏移模式。(149字)

大熊 48

Python中类与对象

所谓面向对象的编程,就是首先研究实例对象,抽象提炼出这些对象的特征属性,与特征行为,生成类。类是抽象的,它是对一群具有相同特征和行为的事务的统称,例如,“书是人类进步的阶梯”中提到的书并不具体指哪本书,它就是一个类。例如,定义一个包含类属性、类方法的Car类,并在类方法中用cls访问和修改类的属性,然后创建Car类的对象car,对象car调用类方法。类的成员包括属性和方法,默认它们可以在类的外部被访问或调用,但考虑到数据安全问题,有时需要将其设置为私有成员,限制在类外部对其进行访问或调用。

2301_80002696的博客 1508

Flutter框架GetX从入门到精通第二篇:路由管理-告别繁琐的Navigator

Flutter框架GetX从入门到精通第二篇:告别繁琐的Navigator。本系列将带你从零开始,一步步掌握 GetX 框架的核心功能与实战技巧。

鹏多多的博客 170

新手理解之python中的类和对象

新手理解之python中的类和对象1. 1.类是什么? 类是一个抽象的概念,泛指很多相似的个体组成的,具有共同特征的事物。 比如类是一个车,这车就包括各种车型 2.对象是什么? 类里面的具体的一个事物(必须要实际存在的一个事务)。 比如 五菱神车S(此车就是实际存在的一种车),他是车这个类的具体化,先有类,才有对象 类与对象的举例: def eating(): print("吃饭") d...

HHA的博客 510

js逆向-逆向部分技巧总结

js逆向-逆向部分技巧总结

Deng872347348的博客 2133

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python 第七篇: 类与对象

在刚接触编程时,我们就了解到编程界有两大思想:面向过程与面向对象,Python 就是一门面向对象的语言,如果你了解过面向对象的思想,自然就知道面向对象思想包含两个基本概念:类与对象 ,下面我们就一起详细学习下 Python 的类与对象吧! 1.基本使用 # 类的定义 class Car: pass # 创建 Car 的实例对象 c class Car: pass c = Car...

yangsen159的博客 293

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

一文讲全了Python 类和对象内容

摘要:这是一个关于Python类和对象的全部内容。

华为云官方博客 1622

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python中的类与对象

定义类的格式:class类名[(父类)]:​ 类体pass。

2401_87413560的博客 563

python中的类与模块

定义一个类Phone# 类的属性brand = "小米"# 类的方法print("拨打电话")print("发送信息")关键字class是用来定义类,它是定义类的固定形式。类名:为类定义的名称。为了区分类与函数,类名称首字母建议大写类的属性:表示这个类具有的属性。属性就是类中的变量的别称。类的方法:表示这个类的一些功能。方法就是类中的函数的别称。self参数:一个由程序自动转入的特殊参数。self参数代表的就是实例化生成的对象。即对象会将自己传递给self参数。

Barbara1314的博客 1059

初学者python笔记(面向对象编程、类与对象)

文章目录面向对象设计类与对象的概念1、类与对象的本质2、面向对象设计 到 面向对象编程3、类实例化4、例如一个学校类面向对象编程1、案例2、面向对象语言和面向对象编程之间的关系3、类的属性4、类的其他一些属性5、类中的作用域6、实例化相关(查、增、改、删) Python是一门面向对象设计的编程语言,所以Python里面提供了非常专业的面向对象用法。本篇就来总结一下面向对象相关的知识,从面向对象设计...

Viewinfinitely的博客 473
上一篇: JSON格式
下一篇: 数据库基础面试题(回答思路和面试建议)
小李不秃头♛
博客等级 码龄2年 619粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值