Python给实例属性x赋值为5后为何类初始化if判断仍输出ERROR
问题原因解答
1. 执行顺序问题
你的代码运行顺序和预想的逻辑不一致:
- 定义
Test类时,类变量Test.x的初始值为0 - 运行
i = Test()时会立刻触发__init__构造方法执行,此时Test.x还是0,所以直接输出ERROR,构造方法运行结束 - 最后才运行
i.x = 5,这时候之前的判断逻辑已经执行完毕,不会再触发二次判断,自然不会输出OK
2. 类变量与实例变量的差异
就算调整赋值顺序,你当前的写法也修改不到判断逻辑用到的变量:__init__里判断的是Test.x,这是属于Test类本身的类变量,而你给i.x赋值时,是给实例i单独创建了一个同名的实例属性,两个变量是独立存储的,修改实例属性不会影响类变量的值。
正确写法示例
写法1:修改类变量后再实例化
class Test(): x = 0 def __init__(self): if Test.x == 5: print("OK") else: print("ERROR") # 先修改类变量,再实例化 Test.x = 5 i = Test()
运行后输出:OK
写法2:判断逻辑改为读取实例属性
class Test(): def __init__(self, x): # 先给实例属性赋值再判断 self.x = x if self.x == 5: print("OK") else: print("ERROR") i = Test(5)
运行后输出:OK
内容的提问来源于stack exchange,提问作者Soalni
相关产品推荐
相关产品推荐

