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

yizhihongxing

下面是《从零学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中的列表中拆分列表的元素

    【问题标题】:Split elements of a list inside a list in python在python中的列表中拆分列表的元素 【发布时间】:2023-04-05 10:42:01 【问题描述】: 我是 Python 新手。如何从一个列表中的多个列表中创建一个列表?例如, list1 = [‘aplle’, ‘grape’, [‘apl…

    Python开发 2023年4月5日
    00
  • python3使用mutagen进行音频元数据处理的方法

    下面是“Python3使用Mutagen进行音频元数据处理的方法”的完整攻略。 简介 Mutagen是一个Python3库,它提供了操作多种音频格式元数据的API。它支持许多常见格式,包括MP3、FLAC、OGG、MP4和WAV。在本文中,我们将向大家演示如何使用Mutagen库更新音频元数据。 安装Mutagen 在正式开始之前,我们需要先安装Mutage…

    python 2023年6月2日
    00
  • python数学建模之Matplotlib 实现图片绘制

    下面是关于“python数学建模之Matplotlib 实现图片绘制”的完整攻略: Matplotlib 简介 Matplotlib 是一款 Python 开发的数据可视化工具包,可以创建矢量图和位图,并且支持交互式界面。它可以方便地绘制线图、散点图、柱状图、饼状图、3D 图像等,适合于对数据进行可视化分析和研究。 Matplotlib 安装 在终端界面中输…

    python 2023年5月19日
    00
  • 十一个案例带你吃透Python函数参数

    十一个案例带你吃透Python函数参数 在Python中,函数参数可以通过不同的方式传递和处理。本攻略将通过十个实例,逐一详细讲解Python函数参数的各种用法和注意事项。 1. 位置参数 “位置参数”是最基本的参数传递方式,即按照函数定义时参数的位置传递。例如: def add(x, y): return x + y result = add(1, 2) …

    python 2023年6月5日
    00
  • python面试题之列表声明实例分析

    当面试考察Python开发人员时,经常会涉及到关于列表声明的相关问题。Python中的列表是最常见的内置数据类型之一,它具有动态性和可变性,可以存储各种数据类型的值。在本文中,我们将解释Python中的列表声明,并提供几个示例,以帮助您更好地理解列表声明的前提条件和用法。 什么是列表声明? 列表声明是指将一个或多个值分配给列表的过程。在Python中,可以通…

    python 2023年6月6日
    00
  • Python 文档解析lxml库的使用详解

    Python文档解析lxml库的使用详解 在本文中,我们将介绍如何使用Python的lxml库解析XML和HTML文档。我们将介绍lxml库的基本用法,包括如何使用XPath表达式和CSS选择器来查找和提取文档中的元素。我们还将提供两个示例,以帮助读者更好地理解lxml库的使用。 步骤1:安装必要的库 在使用Python的lxml库解析XML和HTML文档之…

    python 2023年5月15日
    00
  • Python抓取网页图片难点分析

    Python抓取网页图片难点分析 1. 资源定位 要抓取网页中的图片,首先需要定位图片所在的资源路径,通常包括以下两种方式: 1.1 直接获取源代码中的图片链接 在页面源代码中,图片资源通常是通过<img>标签引用的,其路径可以通过标签的src属性获取。通过requests库获取网页源代码并对其进行解析,即可获取页面中所有图片的资源路径。 示例代…

    python 2023年6月3日
    00
  • python函数和python匿名函数lambda详解

    Python 函数和 Python 匿名函数(lambda)详解 什么是函数? 函数是一种可重用的、可调用的代码块,它接受一些输入(可能为空),并通过执行过程生成一些输出。Python 中的函数定义以 def 关键字开头,后面是函数名、参数列表和冒号,之后是一个缩进的代码块。函数可以返回一个值(使用 return 语句)。以下是一个计算两个数字相加的函数示例…

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