Python中如何修改类中的变量?我的代码执行后变量未生效
我来帮你分析下问题出在哪,以及怎么解决:
你的代码里有几个关键问题导致全局变量php始终没被修改:
- 方法参数覆盖了全局变量:你在
r方法里定义了参数php,这个参数是方法的局部变量,和全局的php完全是两个独立的变量。所以你在方法里做的phpt = php、php = phpt+phpt都是在操作这个局部变量,根本碰不到全局的php。 - 没有接收方法的返回值:虽然方法最后
return php(返回的是局部变量的值),但你调用add_s_f_g_v_php.r(php)时,没把返回值赋值给全局的php,全局变量自然不会更新。 - 全局变量声明无效:就算你尝试在方法里加
global php,但因为方法已经有同名的参数php,Python会直接报错——局部变量在赋值前被引用,因为参数已经是局部的了,global声明会和它冲突。
给你几个可行的解决方案:
方案1:接收返回值,更新全局变量
这种方式不用改方法逻辑,只需要在调用时把返回值赋值给全局php:
php = 1 class add_s_f_g_v_php: def r(php): phpt = php php = phpt + phpt return php # 把方法返回的结果重新赋值给全局php php = add_s_f_g_v_php.r(php) print(php) # 输出2
方案2:用global声明,避免参数同名
如果想直接在方法里修改全局变量,要去掉同名参数,然后在方法内声明global php:
php = 1 class add_s_f_g_v_php: def r(): global php phpt = php php = phpt + phpt add_s_f_g_v_php.r() print(php) # 输出2
注意:这里的r是类的静态方法(没有self参数),直接用类名调用即可;如果要写成实例方法,记得加上self参数并创建实例调用。
方案3:用类变量替代全局变量(更推荐)
尽量避免使用全局变量,把php封装成类变量更符合面向对象设计:
class add_s_f_g_v_php: php = 1 # 定义类变量 @classmethod def r(cls): cls.php = cls.php * 2 # 直接修改类变量 add_s_f_g_v_php.r() print(add_s_f_g_v_php.php) # 输出2
内容的提问来源于stack exchange,提问作者user14624548
相关产品推荐
相关产品推荐

