从零学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执行等待程序直到第二天零点的方法

    要实现在Python程序中等待到明天的零点,可以使用 Python datetime 和 time 模块来计算距离当前时间到第二天零时还有多长时间,然后使用time.sleep()函数来让程序挂起。下面是具体的代码实现步骤: 导入 datetime 和 time 模块: import datetime import time 获取当前时间: now = da…

    python 2023年6月2日
    00
  • Python实现杰卡德距离以及环比算法讲解

    Python实现杰卡德距离以及环比算法讲解 杰卡德距离和环比算法是常用的数据分析算法,可以用于计算两个集合之间的相似度和计算环比增长率。在Python中,可以使用numpy库实现卡德离和环比算法。本文将详细讲解Python实现杰卡德距离和环比算法的整个攻略,包括法原理、Python实现过程和示例。 算法原理 杰卡德距离 杰卡德距离是一种常用的似度度量方法,可…

    python 2023年5月14日
    00
  • Python学习笔记(一)(基础入门之环境搭建)

    下面是详细的攻略: Python学习笔记(一)(基础入门之环境搭建) Python是一种高级编程语言,具有简单易学、可读性强、功能强大等特点,被广泛应用于Web开发、数据分析、人工智能等领域。本文将介绍如何在Windows和MacOS上搭建Python环境,并提供两个示例说明。 Windows环境搭建 步骤一:下载Python 首先,我们需要从Python官…

    python 2023年5月14日
    00
  • Python中encode()方法的使用简介

    Python中encode()方法的使用简介 在Python中,字符串是一类使用特定编码的字符序列。当我们需要在不同编码之间进行转换时,可以使用Python的encode()和decode()方法。本文将重点介绍encode()方法的使用。 encode()方法 encode()是Python字符串对象的方法,它用于将字符串编码为指定字符集的字节序列。它的基…

    python 2023年5月31日
    00
  • Python defaultdict方法使用分析

    Python defaultdict方法使用分析 在 Python 的 collections 模块中,提供了一个名为 defaultdict 的字典类,它是 Python 标准字典(dict)的子类,能够为字典提供一些额外的API和特殊的行为。在本文中,我们将讨论 defaultdict 是什么,以及它与标准字典的区别,在哪些场景下需要使用 default…

    python 2023年6月3日
    00
  • Python实现获取当前目录下文件名代码详解

    下面是关于Python实现获取当前目录下文件名代码的详细攻略,包括具体的代码和解释。 获取当前目录下所有文件名 步骤一:导入os模块 在Python中,要实现获取当前目录下的所有文件名,首先需要导入os模块。os模块是Python中的一个操作系统接口模块,提供了一些与操作系统交互的函数和变量。可以使用以下代码导入os模块: import os 步骤二:获取当…

    python 2023年6月3日
    00
  • 几款Python编译器比较与推荐(小结)

    以下是“几款Python编译器比较与推荐(小结)”的详细攻略: 1. 什么是Python编译器? Python编译器是一种将Python代码转换成机器可读的二进制代码的程序。Python语言本身是一种解释性语言,但是通过编译器可以将Python代码转换为可执行文件,就像编译C或Java程序一样。Python编译器通常被称为“Python解释器”,但实际上它们…

    python 2023年5月18日
    00
  • python 使用csv模块读写csv格式文件的示例

    当需要处理大量的数据时,我们通常会使用csv格式的文件存储和读取数据,而Python中的csv模块就是一个很好地处理这种文件格式的工具。 使用csv模块读取csv格式文件1. 导入csv模块 import csv 打开csv文件 可以使用 Python 中的 open 函数打开 csv 文件,可以指定文件名、文件模式(读取模式 r、写入模式 w、追加模式 a…

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