从零开始:Python语言进阶之类与对象

用LTspice仿真Buck电路输出电容:从参数计算到波形优化的全流程演示 本文详细介绍了使用LTspice仿真Buck电路输出电容的全流程,从理论计算到波形优化。通过解析关键参数如纹波电压、瞬态响应和ESR,结合工程计算方法和LTspice仿真技巧,帮助工程师优化Buck电路设计,解决输出纹波过大和瞬态响应不佳的问题。 阅读详情

一、类与对象基础概念

 

1.1 什么是类与对象

 

类(Class)是一种抽象的概念,它像是一个蓝图或模板,定义了一类事物共有的属性和行为 。例如,“汽车”类,它可以包含品牌、颜色、速度等属性,以及启动、加速、刹车等行为。

 

对象(Object)则是类的具体实例,是根据类这个模板创建出来的真实个体。比如,一辆具体的“特斯拉Model 3”汽车,就是“汽车”类的一个对象,它拥有自己特定的品牌、颜色等属性值,也能执行启动、加速等行为。

 

在Python中,类与对象遵循面向对象编程(Object-Oriented Programming,OOP)范式,通过封装、继承和多态等特性,让代码更具模块化、可复用性和可维护性。

 

1.2 类的定义

 

在Python中,使用 class 关键字来定义类,语法格式如下:

class ClassName:
    # 属性定义
    attribute = value
    # 方法定义
    def method_name(self, parameter1, parameter2,...):
        # 方法体
        pass

其中, ClassName 是类名,遵循大驼峰命名法(即每个单词首字母大写,如 MyClass ); attribute 是类属性,用于定义类共有的数据; method_name 是类方法,用于定义类的行为,类方法的第一个参数通常为 self ,它代表类的实例本身。

 

1.3 对象的创建

 

创建对象,也称为实例化类,只需调用类名并传入必要的参数(如果构造方法需要的话)即可。例如:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        print(f"{self.name} says Woof!")

my_dog = Dog("Buddy", 3)  # 实例化Dog类,创建对象my_dog

这里, my_dog 就是 Dog 类的一个对象,它拥有 name 为 Buddy 、 age 为 3 的属性,并且可以调用 bark 方法。

 

二、类的基础结构详解

 

2.1 构造方法  __init__ 

 

 __init__ 方法是Python类中一个特殊的方法,也被称为构造方法。它在对象被创建时自动调用,主要用于初始化对象的属性。其语法形式如下:

class ClassName:
    def __init__(self, param1, param2,...):
        self.attribute1 = param1
        self.attribute2 = param2

__init__ 方法的第一个参数必须是 self ,后续参数根据实际需要定义,用于接收创建对象时传入的值,并将其赋值给对象的属性。例如:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person("Alice", 25)
print(person.name)  # 输出:Alice
print(person.age)  # 输出:25

2.2 实例属性与实例方法

 

①实例属性:属于对象自身的属性,每个对象的实例属性可以有不同的值。在 __init__ 方法中通过 self 定义的属性都是实例属性。例如上面 Person 类中的 name 和 age 就是实例属性。

​

②实例方法:是在类中定义的函数,用于操作实例属性或实现特定的行为。实例方法的第一个参数必须是 self ,通过 self 可以访问和修改实例属性。如 Dog 类中的 bark 方法:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        print(f"{self.name} says Woof!")

my_dog = Dog("Buddy", 3)
my_dog.bark()  # 调用实例方法bark

2.3 类属性与类方法

 ①类属性:是属于类本身的属性,所有类的实例共享该属性。定义类属性直接在类内部,方法外部声明即可。例如:

class Circle:
    pi = 3.14159  # 类属性

    def __init__(self, radius):
        self.radius = radius

    def calculate_area(self):
        return Circle.pi * (self.radius ** 2)

circle1 = Circle(5)
circle2 = Circle(3)
print(circle1.pi)  # 输出:3.14159
print(circle2.pi)  # 输出:3.14159

②类方法:是与类相关联的方法,而不是与类的实例相关联。使用 @classmethod 装饰器定义类方法,类方法的第一个参数通常为 cls ,代表类本身。类方法常用于操作类属性或创建对象的特定方式。例如:

class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    @classmethod
    def from_string(cls, date_str):
        year, month, day = map(int, date_str.split('-'))
        return cls(year, month, day)

date = Date.from_string("2024-10-01")
print(date.year)  # 输出:2024
print(date.month)  # 输出:10
print(date.day)  # 输出:1

2.4 静态方法

 

静态方法是一种不依赖于类或实例的方法,它与类和实例没有直接关系,使用 @staticmethod 装饰器定义。静态方法内部不能访问类属性和实例属性,也不能调用类方法和实例方法,常用于实现一些与类相关但不需要访问类或实例状态的功能。例如:

class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b

result = MathUtils.add(3, 5)
print(result)  # 输出:8

三、类与对象常见基础问题及解决

 

3.1 访问控制问题

 

Python中没有像Java、C++那样严格的 private 、 protected 访问修饰符,但可以通过命名约定来实现一定程度的访问控制:

 

①单下划线开头:如 _attribute ,表示该属性或方法是“受保护的”,虽然可以在类外部访问,但约定开发者不要这样做,意味着这是类内部使用的成员。

​

②双下划线开头:如 __attribute ,会触发名称重整(Name Mangling)机制,Python会将其重命名为 _ClassName__attribute ,在类外部不能直接通过 __attribute 访问,但仍可以通过重整后的名称访问。例如:

class MyClass:
    def __init__(self):
        self._protected_attr = 10
        self.__private_attr = 20

obj = MyClass()
print(obj._protected_attr)  # 可以访问
# print(obj.__private_attr)  # 报错
print(obj._MyClass__private_attr)  # 通过名称重整后的名称可以访问

3.2 实例属性与类属性混淆问题

 

由于类属性和实例属性的访问方式相似,很容易出现混淆,导致不符合预期的结果。例如:

class Counter:
    count = 0

    def __init__(self):
        Counter.count += 1

counter1 = Counter()
counter2 = Counter()
print(counter1.count)  # 输出:2
print(counter2.count)  # 输出:2

# 错误修改类属性的方式
counter1.count = 5  # 这里实际上是为counter1创建了一个实例属性count,而不是修改类属性
print(Counter.count)  # 输出:2
print(counter1.count)  # 输出:5
print(counter2.count)  # 输出:2

为避免此类问题,明确区分:如果是所有实例共享的值,定义为类属性;如果每个实例有独立的值,定义为实例属性。修改类属性时,通过类名进行修改。

 

3.3 方法调用中的  self  问题

 

在定义实例方法时,必须将 self 作为第一个参数,但在调用实例方法时,不需要显式传入 self ,Python会自动将调用方法的实例作为 self 传入。初学者可能会在调用方法时错误地传入 self ,或者在实例方法内部忘记使用 self 访问实例属性和方法。例如:

class MyClass:
    def __init__(self, value):
        self.value = value

    def print_value(self):
        print(self.value)

obj = MyClass(10)
# 正确调用方式
obj.print_value()  
# 错误调用方式,不需要传入self
# obj.print_value(obj)  

四、总结

 

类与对象是Python面向对象编程的基础核心,扎实掌握类的定义、对象的创建,以及构造方法、各类属性和方法的使用,是进一步学习类的高级特性(如继承、多态、封装)的前提。同时,解决常见的基础问题,能够帮助我们编写出更规范、更正确的代码。在后续的学习和实践中,不断运用这些基础知识,结合实际项目,将能更深刻地理解类与对象在Python编程中的重要性和强大之处。

感谢大家的关注,正在持续更新中....

逻辑电平(TTL/CMOS/LVDS/LVPECL/CML) 逻辑电平介绍 TTL------晶体管-晶体管逻辑门(Transistor-Transistor Logic gate) TTL采用5V电源 阅读详情

相关推荐

Allegro PCB设计小技巧:如何用Shift键快速平移复制走线和过孔?

本文深入解析了Allegro PCB设计中利用Shift键进行平移复制的核心技巧。通过对比传统复制粘贴流程,详细演示了如何高效、精准地批量复制走线和过孔,尤其适用于创建等间距电源总线、过孔阵列等场景,能显著提升PCB设计效率与准确性。

pz89012345的博客 553

python基础:类和对象

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

2301_82065950的博客 2536

python——模拟砍价

类型:随机数。

m0_62488776的博客 1970

Python - 类与对象

Python作为面向对象语言,所有实体都是对象。通过class关键字可创建类,其中__init__()方法用于初始化对象。类变量被所有实例共享,实例变量则属于特定对象。可通过点运算符访问属性和方法,或使用getattr()等内置函数管理属性。Python自动回收引用计数为零的对象,del()方法可在销毁前执行清理。使用双下划线前缀(__)可隐藏属性,实际可通过_className__attrName访问。内置type()函数可检查对象所属类。

路漫漫其修远兮,吾将上下而求索 824

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识,起步是晚了一点,但好歹是开了个头。下面就借助TransFusion论文及其开源代码来串一串这方面的知识。这个很好理解,参考FPointNet网络图示。就是利用现有的2D检测器在图像上提取2D初始框,根据Camera成像原理,捕获2D框视锥内的点云,再利用点云分类模型(如:PointNet)做进一步分类。

4961

4、硬件工程师笔试面试知识器件篇——电阻(2025版本)

本文系统介绍了电阻的基础知识与应用。首先阐述了电阻的定义、工作原理及类型(固定/可变电阻),详细说明了常见电阻材料(碳膜、金属膜、线绕等)的特性与标记方法。重点分析了电阻在电路设计中的关键参数:功率计算需考虑1.5-2倍安全裕度,温度系数影响电路稳定性。文章还对比了不同封装形式(轴向/贴片/功率封装等)的适用场景,特别强调高功率电路需选择专用封装并做好散热设计。最后指出电路仿真可优化电阻选择,并列举了相关电子元件在设计中同样需要仿真验证。全文为硬件工程师提供了电阻选型的实用指导。

XU157303764的博客 5202

类与对象—python

类的定义,类和对象,类的5个常用构造方法,类型注解的用法。

my_heart_goon的博客 1141

matlab RANSAC拟合圆柱【2025最新版】

RANSAC拟合圆柱

点云侠的博客 3135

python面向对象

介绍了python类的使用方法

pin-csdn的博客 263

从0到1带大家搭建spring cloud alibaba 微服务大型应用框架(十一)spring-boot-admin 监控篇(2)springcloud 集成spring boot admin

从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(十一)spring-boot-admin 监控篇(2)springcloud 集成spring boot admin spring-boot-admin 服务端创建与集成入nacos spring-boot-admin 查看日志

峡谷电光马仔的博客 1378

HBV模型

据说mHM模型也是基于HBV模型原理。 网上不同版本的HBV模型稍有差别 def hbv_main(n_days, params, air_temp, prec, dpem): #n_days 模拟天数 #air_temp 每月温度 #prec 降水 #dpem 每月蒸发 Tsnow_thresh = 0.0 ca = 410. # Initialize arrays for the simiulation snow = np.zeros(air_temp.size

m0_46268055的博客 2323

9. 类

9.类 类提供了一种组合数据和功能的方法。 创建一个新类意味着创建一个新的对象类型,从而允许创建一个该类型的新实例。 每个类的实例可以拥有保存自己状态的属性。 一个类的实例也可以有改变自己状态的(定义在类中的)方法。 和其他编程语言相比,Python 用非常少的新语法和语义将类加入到语言中。它是 C++ 和 Modula-3 中类机制的结合。Python 的类提供了面向对象编程的所有标...

keny-大成的博客 423

从零到多智能体:Google Agent开发套件(ADK)入门指南

ADK促进自定义工具生产的能力是其优势之一。本质上,工具只是一个带有描述性文档字符串的Python函数。

独立开发,substack顶级编辑 2488

从零开始:Python语言进阶之多态

Python多态特性解析:本文系统介绍了Python中多态的实现方式及其应用价值。通过继承实现的多态允许子类重写父类方法实现不同行为,如Animal父类与Dog/Cat子类的speak方法示例。基于动态类型的"鸭子类型"多态则更灵活,只要对象实现特定方法即可通用处理,如FileWriter和ConsoleWriter的write方法案例。多态显著提升了代码的可维护性、可扩展性和可读性,但也需要注意方法重写规范和动态类型风险。这两种多态实现方式共同构成了Python编程的强大工具,使开发者

玉笥寻珍的博客 1487

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

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

从零开始:Python语言进阶之迭代器

本质上,迭代就是逐个处理数据集合中元素的过程,除了 for 循环,像 while 循环结合索引、列表推导式、生成器表达式等操作,底层也都依赖迭代机制。从可迭代对象到迭代器的转换,再到各种内置工具的使用,以及实际应用中的问题处理,这些基础知识构成了灵活运用迭代器的基石。1. 首先执行 iter(counter) ,即调用 CounterIterator 类的 __iter__() 方法,由于 __iter__() 方法返回的是迭代器 自身( return self ),所以获取到了迭代器对象。

玉笥寻珍的博客 1518

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

从零开始学习Python

使用def关键字定义函数,提高代码的重用性。创建模块:新建一个.py文件,编写函数或变量。导入模块:使用import关键字。# 在my_module.py中定义函数")# 在主程序中导入并使用pass用于科学计算的库,支持多维数组和矩阵运算。print(array.shape) # 输出(2, 3)通过本篇文章,我们从环境搭建开始,逐步深入了解了Python的基本语法、控制流、函数和模块、文件操作、面向对象编程以及常用的第三方库。希望读者能够通过实践项目加深理解,并利用提供的资源继续深入学习。

weidl001的博客 3014

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

从零开始学Python第19课:面向对象编程进阶

Python 是动态类型语言,Python 中的对象可以动态的添加属性,对象的方法其实也是属性,只不过和该属性对应的是一个可以调用的函数。在面向对象的世界中,一切皆为对象,我们定义的类也是对象,所以类也可以接收消息,对应的方法是类方法或静态方法。通过继承,我们可以从已有的类创建新类,实现对已有类代码的复用。

骆昊的技术专栏 856

从零开始学习数据结构与算法:Python实现

数据结构与算法是计算机科学中至关重要的概念之一,对于任何想要成为优秀程序员的人来说,深入理解它们是必不可少的。本文将介绍如何从零开始学习数据结构与算法,并使用Python语言实现一些基本的数据结构和算法,帮助读者入门。

一键难忘的博客 4091

从零开始学Python编程之类和对象

在 Python 中,类是一种可以定义数据和行为的语言结构。一个对象是一个类的实例,它可以访问类中定义的数据和方法。在 Python 中,可以使用 class 关键字来定义一个类。x = 5在这个例子中,我们定义了一个名为MyClass的类,它有一个名为x的属性,其值为5。在本篇文章中,我们讨论了 Python 中的类和对象,包括定义类、类的继承、类的特殊方法、魔术方法、封装和多态等内容。类和对象是 Python 中最重要的概念之一,熟练掌握这些概念对于成为一名优秀的 Python 开发人员至关重要。

岛上程序猿 185

从零开始:Python小白的编程进阶之路

最新接入DeepSeek-V3模型,点击下载最新版本InsCode AI IDE 从零开始:Python小白的编程进阶之路 在当今数字化时代,编程技能已经成为一项不可或缺的能力。无论你是学生、职场人士还是创业者,掌握一门编程语言都能为你打开更多机会的大门。Python作为一门简洁易学的语言,成为了许多初学者的首选。然而,对于毫无编程经验的小白来说,学习Python并非易事。幸运的是,随着科技的进步...

inscode_053的博客 987

从零开始:Python编程入门与进阶指南

最新接入DeepSeek-V3模型,点击下载最新版本InsCode AI IDE 从零开始:Python编程入门与进阶指南 对于许多编程新手来说,学习Python既充满挑战又令人兴奋。Python作为一种高级编程语言,因其简洁的语法和广泛的应用场景而备受欢迎。然而,初学者往往面临诸多困难,如代码编写、调试和优化等问题。幸运的是,随着AI技术的发展,像InsCode AI IDE这样的智能化工具为小...

inscode_052的博客 1103

从零开始:Python语言进阶之异常处理

本文介绍了Python异常处理的核心知识。首先解释了异常的概念,列举了常见的异常类型(如ZeroDivisionError、FileNotFoundError等)。重点讲解了try-except语句的基础用法,包括捕获多个异常类型的方法。随后介绍了else和finally子句的应用场景,强调finally子句在资源释放中的重要性。文章还讲解了如何自定义异常类以适应业务需求。最后针对常见问题(如捕获所有异常、异常丢失等)给出了解决方案,并指出合理使用条件判断能减少不必要的异常处理开销。全文强调异常处理是编写健

玉笥寻珍的博客 2823

【Python】从基础到进阶(一):了解Python语言基础以及变量的相关知识

Python是一种高级、解释型、通用的编程语言,由Guido van Rossum于20世纪90年代初创立。Python以其简洁易读的语法和强大的功能而闻名,使其成为新手和经验丰富的开发人员的首选语言之一。x = 10 # 定义一个整数变量name = "Alice" # 定义一个字符串变量pi = 3.14 # 定义一个浮点数变量is_active = True # 定义一个布尔变量变量名应该具有描述性,以便代码的可读性和可维护性。

Allen- 7667

从零开始:Python语言进阶之继承

在Python面向对象编程中,继承是实现代码复用和建立类层次结构的重要机制。掌握继承的基础知识,不仅能提升代码的编写效率,还能让程序结构更加清晰、易于维护。下面将从基础概念出发,逐步深入讲解Python继承的相关知识,并剖析常见问题与解决方法。

玉笥寻珍的博客 1241

从零开始:Python编程的进阶之旅

开发AI智能应用,就下载InsCode AI IDE,一键接入DeepSeek-R1满血版大模型! 从零开始:Python编程的进阶之旅 在当今数字化时代,掌握一门编程语言已成为个人职业发展的重要技能之一。而Python,作为一门简洁优雅、功能强大的编程语言,无疑是初学者和专业人士的最佳选择。然而,学习编程并非易事,尤其对于那些没有技术背景的人来说,更是充满挑战。幸运的是,随着AI技术的飞速发展,...

RubyLion56的博客 685

从零开始:Python小白的开发进阶之路

开发AI智能应用,就下载InsCode AI IDE,一键接入DeepSeek-R1满血版大模型! 从零开始:Python小白的开发进阶之路 在当今数字化时代,编程技能已经成为一项不可或缺的能力。无论是数据分析、机器学习还是Web开发,Python作为一门简单易学且功能强大的语言,成为了许多初学者的首选。然而,对于刚刚接触编程的小白来说,如何快速上手Python并完成实际项目开发?本文将结合智能化...

PurpleRain89的博客 441
上一篇: 从零开始:用Python语言基础构建宠物养成游戏:从核心知识到完整实战
下一篇: 从零开始:Python语言进阶之继承
玉笥寻珍
博客等级 码龄2年 282粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉笥寻珍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值