首页 > 编程语言 >如果python的类变量和实例变量名字一样会如何?

如果python的类变量和实例变量名字一样会如何?

时间:2024-10-21 14:44:46浏览次数:6  
标签:Foo 变量 get python self 实例 foo name

python中类变量是属于类的,不属于具体的对象,所有对象共享一个类变量。类变量可以通过类名.变量名访问,也可以通过实例化后的对象.变量名访问。那么,如果我给对象的变量起的名字和类变量同名会如何?我们写代码测试一下:

class Foo:
    name = "hello"

    def set_instance_name(self, name):
        self.name = name
    
    def get_instance_name(self):
        return self.name
    
    def get_class_name(self):
        return Foo.name

foo = Foo()
print(f"{Foo.name=}")
print(f"{foo.get_instance_name()=}")
print(f"{foo.get_class_name()=}")

foo.set_instance_name("world")
print(f"{Foo.name=}")
print(f"{foo.get_instance_name()=}")
print(f"{foo.get_class_name()=}")

输出:

Foo.name='hello'
foo.get_instance_name()='hello'
foo.get_class_name()='hello'
Foo.name='hello'
foo.get_instance_name()='world'
foo.get_class_name()='hello'

可以看到,当读取self.name时,如果已经有实例变量则访问实例变量,否则访问类变量。当写入self.name时,会创建新的实例变量,不会改变类变量。

因此,类变量可以作为“实例化”对象的默认值使用。比如这段神奇的代码:

class Foo:
    name = "hello"

    def __init__(self) -> None:
        self.name = self.name

foo = Foo()
print(f"{foo.name=}")

foo.name = "world"

print(f"{foo.name=}")
print(f"{Foo.name=}")

__init__函数中出现了self.name=self.name,是不是很神奇?这里等于号右边因为还没有名字叫name的实例变量,因此访问到了类变量,等于号左边是实例变量。在创建后,因为实例变量有了name,之后再访问self.name就访问到了实例变量。

标签:Foo,变量,get,python,self,实例,foo,name
From: https://www.cnblogs.com/wangbingbing/p/18489459

相关文章

  • C++静态成员变量和静态成员函数的使用
    1.静态成员变量:定义在类中的静态成员,以static关键字初始化和成员变量区别:a.可以通过类名::变量名进行调用,可访问性还是由(public,private,protected)进行限制 例如下面的mystaitcClass::_id,protected属性内容无法直接进行访问,若要直接访问需要修改为public2.静态成员函数:类似可以通过......
  • Modbus协议概述及实例详解(二)附源码
        通过上一篇《Modbus协议概述及实例详解(一)》相信大家已经了解到Modbus的相关原理以及应用,也了解到了Modbus中在RTU/ASCII/TCP三种协中必不可少协议RTU协议。本章将详细讲解关于ModbusRTU协议的相关内容并附带源码一份,以帮助有需要的读者朋友可以快速开发迭代自己的......
  • 如何使用Python调用API数据
    为什么使用Python调用API数据?简洁的语法:Python的简洁性使得编写API调用代码变得直观易懂。强大的库支持:Python拥有如requests这样的库,极大地简化了HTTP请求的发送和响应的处理。数据处理能力:Python的数据处理库,如Pandas,使得数据的分析和处理变得简单。社区支持:Python社区庞大,......
  • 【25届计算机毕设选题推荐】基于python的重庆旅游景点数据分析系统的设计与实现 【附
    ✍✍计算机毕设编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • 用人话讲计算机:小白版Python篇!(二)基本数据类型1和进制数
    一、数据类型上一节我们曾讲到a=1,b=2,c=“b”之类的东西,我们知道a,b,c叫做变量,而现在所谓的数据类型,其实就是1,2,“b”他们分别属于什么。而我们将数据们分为以下几个类型:1、整数整数,就是我们日常生活中的整数,如1,2,3,-1,-2,0,10,90之类。定义方式:a=12、浮点数浮点数,就是小数,如1......
  • 用人话讲计算机:小白版Python篇!(一)入门知识点和基本语法规范
    注:以下篇章都是用Pycharm写的,具体安装看我主页教程:2024最新:Python与PyCharm下载教程(含汉化!!!)一、什么是Python?标准版:Python是一种高级的、动态类型的编程语言,以其简洁的语法和丰富的库著称。‌Python由荷兰人吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品,它是一......
  • 【计算机毕设选题推荐】基于python的在线考试系统的设计与实现【附源码+部署+讲解】
    ✍✍计算机毕设编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • python 合并同列数据 组合 新的excel
    importpandasaspdfromopenpyxlimportload_workbook#读取Excel文件file_path='test.xlsx'#替换为你的Excel文件路径df=pd.read_excel(file_path)#显示读取的数据print(df)#打开工作簿wb=load_workbook(file_path)ws=wb.active#获取活动工作表......
  • Python小游戏9——天天酷跑
    安装Pygame库。如果你还没有安装,可以使用以下命令:bashpipinstallpygame 游戏代码:pythonimportpygameimportrandom #初始化Pygamepygame.init() #屏幕尺寸SCREEN_WIDTH=800SCREEN_HEIGHT=600screen=pygame.display.set_mode((SCREEN_WIDTH,S......
  • Python小游戏8——贪吃蛇
    贪吃蛇游戏说明蛇可以通过方向键来控制移动,目标是吃掉红色的小方块(食物),每吃掉一个食物,蛇的长度就会增加。如果蛇撞到了墙壁或自己,游戏就会结束。 通过以下命令安装pygame库:bashpipinstallpygame以下是贪吃蛇游戏的代码:pythonimportpygameimportrandom#......