属性和方法 | Python从入门到精通:高阶篇之二十三

简介: 当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性,如果有,则直接返回当前的对象的属性值,如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值,如果没有则报错!

查看上一节:类的定义

类的属性和方法

问:为什么实例可以访问到类中的属性和方法?
答:类中定义的属性和方法都是公共的,任何该类实例都可以访问。

属性和方法查找的流程

当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性,如果有,则直接返回当前的对象的属性值;

如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值,如果没有则报错!

class Person :
    name = 'swk' 

    def say_hello(self) :
         print('你好!')

p1 = Person()
p2 = Person()

# 修改p1的name属性
p1.name = 'zbj'

print(p1.name)
print(p2.name)

执行结果为:p1的name是zbj,而p2的name是swk:
image.png
此时在内存中的变化:
image.png

类对象和实例对象中都可以保存属性(方法)

如果这个属性(方法)是所有的实例共享的,则应该将其保存到类对象中;
如果这个属性(方法)是某个实例独有,则应该保存到实例对象中。
一般情况下,属性保存到实例对象中,而方法保存到类对象中。

设置新需求:say_hello()可以打印:“你好!我是 xxx”

上面讲过:方法每次被调用时,解析器都会自动传递第一个实参,其实第一个参数,就是调用方法的对象本身。示例代码和注释如下:

class Person :
    name = 'swk' 
    def say_hello(self) :
        #   如果是p1调的,则第一个参数就是p1对象
        #   如果是p2调的,则第一个参数就是p2对象
        # 一般我们都会将这个参数命名为self
      '''
say_hello()这个方法,可以显示如下格式的数据:
       你好!我是 xxx
注意:在方法中不能直接访问类中的属性,此处只写name是会报错的,所以要通过`self.name`的形式:
     '''
        print('你好!我是 %s' %self.name)

# 创建Person的实例
p1 = Person()
p2 = Person()

# 修改p1的name属性
p1.name = '猪八戒'
p2.name = '沙和尚'

p1.say_hello() # '你好!我是 猪八戒'
p2.say_hello() # '你好!我是 沙和尚'

执行结果为:
image.png
这就完成了上述需求!

点击查看配套视频教程

获取更多内容请订阅Python学习站官方技术圈!

相关文章
|
4天前
|
缓存 开发者 Python
探索Python中的装饰器:从入门到实践
【9月更文挑战第36天】装饰器,在Python中是一种特殊的语法糖,它允许你在不修改原有函数代码的情况下,增加额外的功能。本文将通过浅显易懂的语言和实际代码示例,带你了解装饰器的基本原理,探索其背后的魔法,并展示如何在实际项目中运用这一强大工具。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往更高效、更优雅代码的大门。
25 11
|
2天前
|
数据可视化 IDE 开发工具
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
37 13
|
2天前
|
数据可视化 数据挖掘 大数据
Python 数据分析入门:从零开始处理数据集
Python 数据分析入门:从零开始处理数据集
|
2天前
|
监控 数据可视化 搜索推荐
【Python篇】matplotlib超详细教程-由入门到精通(下篇)2
【Python篇】matplotlib超详细教程-由入门到精通(下篇)
16 8
|
2天前
|
数据可视化 API 数据处理
【Python篇】matplotlib超详细教程-由入门到精通(上篇)
【Python篇】matplotlib超详细教程-由入门到精通(上篇)
19 5
|
2天前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析:从入门到实践
使用Python进行数据分析:从入门到实践
8 2
|
2天前
|
机器学习/深度学习 数据采集 分布式计算
【Python篇】深入机器学习核心:XGBoost 从入门到实战
【Python篇】深入机器学习核心:XGBoost 从入门到实战
11 3
|
2天前
|
编解码 数据可视化 IDE
【Python篇】matplotlib超详细教程-由入门到精通(下篇)1
【Python篇】matplotlib超详细教程-由入门到精通(下篇)
17 3
|
1天前
|
Python
深入解析 Python 中的对象创建与初始化:__new__ 与 __init__ 方法
深入解析 Python 中的对象创建与初始化:__new__ 与 __init__ 方法
7 1
|
2天前
|
存储 C语言 索引
Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法
本文全面介绍了Python的基础知识,包括Python的诞生背景、为什么学习Python、Python的应用场景、Python环境的安装、Python的基础语法、数据类型、控制流、函数以及数据容器的使用方法,旨在为Python零基础读者提供一篇全面掌握Python语法的博客。
8 0
Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法