python 变量作用域问题

duohappy 2016-09-20 07:14:42

variable = 10

class TestInClass(object):
variable = 100

def __init__(self):
self.variable = 300

def sayInstance(self):
print("variable equals %d in class" % variable)
print("variable equals %d in instance" % self.variable)


if __name__ == '__main__':
varClass = TestInClass()
varClass.sayInstance()
'''
输出:
variable equals 10 in class
variable equals 300 in instance

为什么不是
variable equals 100 in class
variable equals 300 in instance
'''
...全文
151 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
维秀斯丢丢 2016-09-22
  • 打赏
  • 举报
回复
python里面 类中的成员变量跟 外部的居然是分开的。
duohappy 2016-09-21
  • 打赏
  • 举报
回复
引用 2 楼 sprawling 的回复:
楼主遇到的问题是比较简单的, 看核心编程(v2)11章8节, 里面有详细的例子
好的,谢啦!
duohappy 2016-09-21
  • 打赏
  • 举报
回复
引用 1 楼 AnonymousRookie 的回复:
第一行虽然没有global显式声明,但默认就是全局的 第4行只是一个类变量,可以由类名直接调用,也可以由对象来调用,但是不能直接访问 如果你把第一行注释掉,就会发现全局变量variable 未定义。  想实现你想要的覆盖效果的话,可以修改如下:

global variable  # 有没有都一样
variable = 10

class TestInClass(object):
    global variable
    variable = 100
清楚多了!谢谢!
sprawling 2016-09-20
  • 打赏
  • 举报
回复
楼主遇到的问题是比较简单的, 看核心编程(v2)11章8节, 里面有详细的例子
  • 打赏
  • 举报
回复
第一行虽然没有global显式声明,但默认就是全局的 第4行只是一个类变量,可以由类名直接调用,也可以由对象来调用,但是不能直接访问 如果你把第一行注释掉,就会发现全局变量variable 未定义。  想实现你想要的覆盖效果的话,可以修改如下:

global variable  # 有没有都一样
variable = 10

class TestInClass(object):
    global variable
    variable = 100

37,737

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧