从零学Python之引用和类属性的初步理解

下面是《从零学Python之引用和类属性的初步理解》的完整攻略:

一、引用

在Python中,变量赋值时会创建一个对象并将变量名指向该对象,这个过程就是变量引用。

1. 可变对象和不可变对象

Python中有可变对象和不可变对象两个概念。其中,不可变对象包括数字、字符串、元组等;可变对象包括列表、字典等。当一个不可变类型的对象被赋给另外一个变量时,实际上是创建了一个新的对象,并把变量名指向这个新的对象。而对于可变对象,则是将变量名指向原来的对象。

示例一:

a = 1  # a指向一个整数对象1
b = a  # b也指向这个整数对象1
a += 1 # a被重新赋值,指向一个新的整数对象2
print(a, b) # 输出2, 1

示例二:

list1 = [1, 2, 3]  # list1指向一个列表对象
list2 = list1  # list2也指向这个列表对象
list1[0] = 0  # 修改列表的第一个元素
print(list1, list2) # 输出[0, 2, 3], [0, 2, 3]

2. 可变对象作为函数参数

在函数中传递可变对象作为参数,如果在函数中修改该可变对象,会影响到该对象在函数外的值。

示例三:

def change_list(lst):
    lst[0] = 0   # 修改列表的第一个元素

list1 = [1, 2, 3]  # 定义一个列表
change_list(list1)  # 通过函数修改列表的值
print(list1)   # 输出[0, 2, 3],因为函数内部修改了列表

二、类属性

类属性是类中定义的属性,可以通过类名直接访问,也可以通过类的实例访问。类属性的值相同,对任何一个实例的访问都将返回相同的结果。

示例四:

class Robot:
    manufacture = "MAKERBOT" # 声明类属性

robot1 = Robot() # 创建Robot的实例
robot2 = Robot() # 再次创建Robot的实例

print(Robot.manufacture) # 通过类名直接访问类属性
print(robot1.manufacture) # 通过实例访问类属性
print(robot2.manufacture) # 通过实例访问类属性

以上代码的输出分别为:

MAKERBOT
MAKERBOT
MAKERBOT

1. 修改类属性的值

可以使用“类名.属性名”或“实例名.属性名”对类属性进行修改,修改后每个实例的属性值都将被更改。

示例五:

class Robot:
    manufacture = "MAKERBOT" # 声明类属性

robot1 = Robot() # 创建Robot的实例
robot2 = Robot() # 再次创建Robot的实例

Robot.manufacture = "XYZ" # 修改类属性

print(Robot.manufacture, robot1.manufacture, robot2.manufacture)
# 输出"XYZ, XYZ, XYZ"

2. 实例属性和类属性的区别

实例属性和类属性是不同的。实例属性是每个实例独有的属性,而类属性是所有实例共享的属性。当实例和类同时具有同名属性时,实例属性的优先级更高,类属性会被屏蔽。

示例六:

class Robot:
    manufacture = "MAKERBOT" # 声明类属性

    def __init__(self):
        self.manufacture = "XYZ" # 定义一个实例属性

robot1 = Robot() # 创建Robot的实例
robot2 = Robot() # 再次创建Robot的实例

print(Robot.manufacture, robot1.manufacture, robot2.manufacture) 
# 输出"MAKERBOT, XYZ, XYZ"

以上代码的输出为:

MAKERBOT XYZ XYZ

在第一个print语句中,Robot.manufacture访问的是类属性,因此输出"MAKERBOT"。robot1.manufacturerobot2.manufacture访问的是实例属性,因为实例属性的优先级比类属性高,所以输出"XYZ"。

好了,以上就是《从零学Python之引用和类属性的初步理解》的完整攻略,希望对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:从零学Python之引用和类属性的初步理解 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 用python写个自动SSH登录远程服务器的小工具(实例)

    以下是用Python写一个自动SSH登录远程服务器的小工具完整攻略: 什么是SSH登录 SSH(Secure Shell)是一种加密协议,通过 SSH 协议,我们可以在本地与远程服务器之间建立加密的网络连接,以此来保证在网络不安全的情况下进行安全的通信、文件传输和命令执行等操作。 如何使用Python实现SSH登录 借助 Python 的 paramiko …

    python 2023年5月19日
    00
  • Python字典实现伪切片功能

    Python 中的字典没有类似于列表或字符串那样的切片功能。但是,我们可以通过使用 itertools.islice() 和字典的键来实现类似于切片的功能。下面是实现这一功能的完整攻略。 第一步:导入必要的模块 itertools.islice()是我们需要的主要模块,因此我们需要导入它。 import itertools 第二步:创建字典 我们需要一个字典…

    python 2023年5月13日
    00
  • python监控日志中的报错并进行邮件报警

    Python监控日志中的报错并进行邮件报警攻略 在Python中,我们可以使用日志记录库来记录应用程序的日志信息。当应用程序出现错误时,我们可以使用监控工具来监控日志文件,并在发现错误时发送电子邮件进行报警。本攻略将介绍如何使用Python监控日志中的报错并进行邮件报警,并提供两个示例。 解决方法 在Python中解决监控日志中的报错并进行邮件报警,我们可以…

    python 2023年5月13日
    00
  • python:解析requests返回的response(json格式)说明

    在Python中,可以使用requests模块发送HTTP请求,并获取响应。当响应的内容为JSON格式时,需要对响应进行解析。以下是Python解析requests返回的response(JSON格式)的详细攻略: 获取响应内容 要获取响应内容,可以使用response.text或response.content属性。以下是获取响应内容的示例: import…

    python 2023年5月14日
    00
  • 需要帮助描述和理解一些 python 代码

    【问题标题】:Need help describing and understanding some python code需要帮助描述和理解一些 python 代码 【发布时间】:2023-04-01 09:52:01 【问题描述】: 如果有人能帮助我理解这个程序中的每一行代码,我将不胜感激。谢谢 sentence = “ASK NOT WHAT YOUR…

    Python开发 2023年4月8日
    00
  • 对python 合并 累加两个dict的实例详解

    对Python合并累加两个dict的实例详解 在Python中,可以通过多种方法合并两个dict,并将它们的值累加在一起。本篇攻略将通过代码实例介绍三种方法。 方法一:字典解析式 dict1 = {‘a’: 3, ‘b’: 5, ‘c’: 2} dict2 = {‘b’: 2, ‘d’: 4, ‘e’: 1} result = {k: dict1.get(k…

    python 2023年6月3日
    00
  • python实现控制台打印的方法

    当我们在Python程序中输出信息时,有一种非常常见的方式是使用控制台打印(console printing)。 在Python中,我们可以使用内置函数print()来打印控制台上的文本和变量值。除了常规的文本,我们还可以通过使用字符串格式设置格式化(print formatting)来自定义打印输出。以下是Python中如何实现控制台打印的方法: 使用pr…

    python 2023年6月5日
    00
  • pip报错“NameError: name ‘ssl’ is not defined”怎么处理?

    当使用 pip 安装 Python 包时,可能会遇到 “NameError: name ‘ssl’ is not defined” 错误。这个错误通常是由于 Python 缺少 SSL 模块或 SSL 模块未正确导入导致的。以下是详细讲解 pip 报错 “NameError: name ‘ssl’ is not defined” 的原因与解决办法,包含两条实…

    python 2023年5月4日
    00
合作推广
合作推广
分享本页
返回顶部