首页 > 编程语言 >Python 入门教程(7)面向对象 | 7.2、成员变量

Python 入门教程(7)面向对象 | 7.2、成员变量

时间:2024-09-23 23:22:10浏览次数:13  
标签:__ 变量 Python 入门教程 7.2 访问 实例 print class

文章目录


前言:

在Python的面向对象编程(OOP)中,变量可以分为两大类:实例变量和类变量。这两类变量在定义、作用域和用途上有所不同,理解它们之间的区别对于编写清晰、可维护的Python代码至关重要。

一、成员变量

1、成员变量的类型

Python是一种动态类型语言,这意味着变量的类型在运行时确定,而不是在编译时。因此,Python中的成员变量可以存储任何类型的数据,包括数字、字符串、列表、字典、元组、集合以及自定义的类实例等。

  • 基本数据类型: 如整数(int)、浮点数(float)、布尔值(bool)和字符串(str)。
  • 复合数据类型: 如列表(list)、元组(tuple)、字典(dict)和集合(set)。
  • 对象: 可以是Python中任何类的实例。

2、实例变量

实例变量是定义在类的实例中的变量,它们属于类的单个实例,每个实例都可以拥有自己独立的实例变量副本。实例变量通常在类的初始化方法__init__中定义,但也可以在实例的任何方法中定义或修改

2.1、定义实例变量

  • __init__方法中定义:
class Person:  
    def __init__(self, name, age):  
        self.name = name  # 实例变量  
        self.age = age    # 实例变量  
  
# 创建Person类的两个实例  
person1 = Person("Alice", 30)  
person2 = Person("Bob", 25)  
  
# 访问实例变量  
print(person1.name)  # 输出: Alice  
print(person2.age)   # 输出: 25
  • 在实例创建后添加:

成员变量也可以在类的实例被创建后,通过直接赋值的方式添加或修改。

person1.email = "[email protected]"

注意: 官方推荐的方法是在__init__中定义实例变量,虽然,在其他成员方法中也可以定义成员变量。

2.2、访问实例变量

访问成员变量同样简单,只需使用点(.)操作符和实例名称来引用它们。

print(person1.name)  # 输出: Alice  
print(person1.age)   # 输出: 30  
print(person1.email) # 输出: [email protected]

2.3、删除实例变量

在Python中,可以使用del语句来删除实例变量与类变量。

del person1.age  
try:  
    print(person1.age)  
except AttributeError:  
    print("Age attribute has been deleted")  
# 输出: Age attribute has been deleted

3、类变量

类变量是定义在类级别上的变量,它们属于类本身,而不是类的任何特定实例。类变量被类的所有实例共享,任何实例对类变量的修改都会影响到其他实例。

3.1、定义类变量

类变量通常在类定义中直接定义,而不是在__init__方法中。

class Person:  
    species = "Human"  # 类变量  
  
    def __init__(self, name, age):  
        self.name = name  
        self.age = age  
  
# 访问类变量  
print(Person.species)  # 输出: Human  
  
# 通过实例访问类变量(通常不推荐,因为不够明确)  
print(person1.species)  # 输出: Human

3.2、访问类变量

  • 通过类名访问:

最直接访问类变量的方式是直接通过类名来访问。这种方式清晰明了,表明了变量的作用域和用途。

class MyClass:  
    class_var = "I am a class variable"  
  
    def __init__(self):  
        pass  
  
# 通过类名直接访问类变量  
print(MyClass.class_var)  # 输出: I am a class variable
  • 通过实例访问:

虽然类变量是定义在类级别上的,但我们也可以通过类的任何实例来访问它们。然而,通过实例访问类变量可能不是最佳实践,因为它可能会让人误以为是实例变量。不过,在Python中这是完全合法的。

# 创建MyClass的一个实例  
obj = MyClass()  
  
# 通过实例访问类变量  
print(obj.class_var)  # 输出: I am a class variable

3.3、修改类变量

由于类变量是共享的,所以无论是通过类名还是实例来修改类变量,都会影响到所有实例。

# 通过类名修改类变量  
MyClass.class_var = "I am modified"  
  
# 通过实例访问修改后的类变量  
print(obj.class_var)  # 输出: I am modified  
  
# 再次通过类名访问修改后的类变量  
print(MyClass.class_var)  # 输出: I am modified

4、注意事项

  • 作用域: 实例变量仅在其所属的实例中可用,而类变量则在整个类中可用,包括所有实例。
  • 共享性: 由于类变量被所有实例共享,因此修改类变量会影响到所有实例。这可能导致意外的行为,特别是当多个实例尝试独立地修改类变量时。
  • 初始化: 实例变量通常在__init__方法中初始化,而类变量则在类定义中直接初始化。
  • 访问: 虽然可以通过实例访问类变量,但通常建议直接通过类名来访问类变量,以保持代码的清晰性和意图的明确性。

5、总结

实例变量和类变量在Python的面向对象编程中扮演着不同的角色。理解它们之间的区别和用法,有助于编写更加清晰、可维护和可扩展的Python代码。

标签:__,变量,Python,入门教程,7.2,访问,实例,print,class
From: https://blog.csdn.net/cloud323/article/details/142470800

相关文章

  • Python背记内容-2day
    Python运算符运算符描述[][:]下标,切片**指数~+-按位取反,正负号*/%//乘,除,模,整除+-加,减>><<右移,左移&按位与^|按位异或,按位或<=<>>=小于等于,小于,大于,大于等于==!=等于,不等于isisnot身份运算符innotin成......
  • Python可视化过程中.pictures.add这里一直报错,不明原因
    大家好,我是Python进阶者。一、前言前几天在Python白银交流群【沐子山树】问了一个Python可视化的问题,问题如下:importmatplotlib.pyplotasplt#创建一个简单的图表fig,ax=plt.subplots()ax.plot([1,2,3,4])ax.set_ylabel('somenumbers')#保存图表为PNG文件temp......
  • Python背记内容-1day
    变量命名需要遵循以下这些规则,这些规则又分为必须遵守的硬性规则和建议遵守的非硬性规则。硬性规则:规则1:变量名由字母、数字和下划线构成,数字不能开头。需要说明的是,这里说的字母指的是Unicode字符,Unicode称为万国码,囊括了世界上大部分的文字系统,这也就意味着中文、日文、希腊......
  • Python——第三方库不能用
    1.问题描述通过pip安装第三方库成功后,在pycharm中在.py文件导入第三方库显示没有这个库。2.解决方法2.1.情况1检查是否在创建项目时开启了虚拟环境。若开启了虚拟环境,项目文件夹会出现如图文件夹:此时有两种方法解决。方法1.直接在Python安装目录中找到需要的库,复制粘贴......
  • Python数据库连接池dbutils详解
    简介在python开发中,如果需要连接MySQL数据库并进行数据操作,可以使用dbutils模块,dbutils是python的一个数据库工具库下载对应模块pipinstallpymysqlpipinstalldbutils连接池配置信息说明使用示例importpymysqlfrompymysql.cursorsimportDictCursorfr......
  • Python中的“打开与关闭文件”:从入门到精通
    引言在日常生活中,我们经常会遇到需要读取或保存信息的情况,比如记录笔记、保存配置信息或者处理大量的数据文件等。对于程序员来说,如何高效、安全地管理这些信息显得尤为重要。Python中的文件操作功能强大且易于使用,可以帮助我们轻松完成各种任务。本文将详细介绍Python中打开与关......
  • Python中的文件读取艺术:从新手到高手的全面指南
    引言读取文件是任何编程语言中最基本也是最重要的功能之一。在日常开发工作中,我们常常需要处理各种类型的文件,如文本文件、CSV文件、JSON文件等。Python作为一门简洁易学的语言,在处理文件方面提供了非常强大的工具。无论是简单的日志分析、数据清洗还是复杂的机器学习任务,都能通过......
  • 为什么网上Python爬虫教程这么多,但是做爬虫的这么少呢?
    专业的爬虫已经有搜索公司、数据公司在做了,像百度、搜狗、德勤等等,相关的程序员岗位也不少。但大多数场景下都只需要简单的爬虫,数据量小、难度低,这样简单的爬虫压根不需要专门的人才,不管用Python,还是用爬虫软件,在很短的时间里都能搞定。其实爬虫无外乎抓包工具、解析工具、HTM......
  • python爬虫案例——抓取链家租房信息
    文章目录1、任务目标2、分析网页3、编写代码1、任务目标目标站点:链家租房版块(https://bj.lianjia.com/zufang/)要求:抓取该链接下前5页所有的租房信息,包括:标题、详情信息、详情链接、价格如:2、分析网页用浏览器打开链接,按F12或右键检查,进入开发者模式;因......
  • Python 项目配置管理框架技术选型
    一、背景介绍在实际生产项目中,不同环境(如开发、测试、生产环境)常有不同配置需求,如数据库链接等。我们期望一份代码无需改动,仅通过单一配置变量调整就能适配和使用多个环境,实现“一份代码,多处部署”的需求,以提升系统部署灵活性及配置管理能力。具体而言,支持“多环境配置”的配置......