python类变量和局部变量的访问

本文通过一个简单类的示例介绍了Python中类变量、局部变量及实例变量的区别与访问方式。展示了不同变量作用域的特点及其内存地址的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天练习了下类变量和局部变量的访问,写一个简单的类来模拟测试下,

class A:
	name = "uu"  # 类变量 name
	
	def test(self):
		name = "dd"  # test方法中的局部变量 name,只能在test方法内部使用
		self.name = "sdd"  # 实例变量 name ,可以在整个类中使用,也可以通过类对象.name来使用(但是必须要先初始化)
		print("%s-%s-%s" %(A.name, name, self.name))
		print(A.name,id(A.name),end="--")
		print(name,id(name),end="--")
		print(self.name,id(self.name),end="--")
		self.test_1()
		
	def test_1(self):
		print("-----in test_1-----")
		#print("-----%s-----" % name)  # 报错,name not defined,因为name是在test方法中定义的局部变量,只能在test方法中使用
		print("-----%s-----" % A.name)
		print("-----%s-----" % self.name)

运行结果

A().test()
uu-dd-sdd
uu 36713280–dd 38691928–sdd 38691984-------in test_1-----
-----uu-----
-----sdd-----

个人练习的一些记录以备查阅

### Python 中的成员变量局部变量的区别及用法 #### 成员变量 成员变量是指在中定义的变量,通常用于存储对象的状态信息。它们可以通过实例访问,并且每个实例都有自己的一份成员变量。 - **变量**: 定义在中但在方法之外的变量称为变量。这些变量的所有实例共享[^1]。如果一个变量被修改,这种修改会影响所有的实例。 ```python class TestClass: shared_variable = 0 # 这是一个变量 obj1 = TestClass() obj2 = TestClass() print(obj1.shared_variable) # 输出: 0 print(obj2.shared_variable) # 输出: 0 TestClass.shared_variable += 1 # 修改变量 print(obj1.shared_variable) # 输出: 1 print(obj2.shared_variable) # 输出: 1 ``` - **实例变量**: 实例变量是在构造函数 `__init__` 中或者通过实例的方法定义的变量。每个对象都有自己的实例变量副本。 ```python class TestClass: def __init__(self, value): self.instance_variable = value # 这是一个实例变量 obj1 = TestClass(10) obj2 = TestClass(20) print(obj1.instance_variable) # 输出: 10 print(obj2.instance_variable) # 输出: 20 obj1.instance_variable = 30 # 修改obj1的实例变量不影响obj2 print(obj1.instance_variable) # 输出: 30 print(obj2.instance_variable) # 输出: 20 ``` #### 局部变量 局部变量是在函数或方法内部声明的变量,仅限于该函数或方法的作用域内有效。一旦退出该函数或方法,局部变量就会销毁[^4]。 ```python class Example: def method(self): local_variable = "I am a local variable" # 这是一个局部变量 print(local_variable) example_instance = Example() example_instance.method() # 正常打印局部变量 print(example_instance.local_variable) # 报错:AttributeError,因为local_variable只存在于method方法内部 ``` #### 主要区别总结 | 特性 | 成员变量 (实例/变量) | 局部变量 | |-----------------|-----------------------------------------------|-------------------------------------| | **作用域** | 整个及其所有实例 | 函数或方法内部 | | **生命周期** | 随着对象创建而存在直到对象销毁 | 方法执行完毕即销毁 | | **初始化位置** | 构造器(`__init__`) 或者作为属性 | 方法体内的赋值操作 | | **共享特性** | 可能共享(变量),也可能独立(实例变量) | 不与其他任何区域共享 | #### 使用场景建议 - 当需要保存某个特定对象状态时,应使用实例变量。 - 如果某些数据在整个的所有实例间都需要保持一致,则应该考虑使用变量。 - 对于临时计算结果或其他不需要持久化的中间量,适合采用局部变量。 ```python class MyClass: class_var = 'Shared by all instances' # 变量 def __init__(self, instance_value): self.instance_var = instance_value # 实例变量 def my_method(self): temp_local = 'Local to this function only!' # 局部变量 print(temp_local) my_obj = MyClass('Unique per object') my_obj.my_method() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值