wangqiuqiu_123 2019-10-11 17:26 采纳率: 0%
浏览 586
已采纳

python 类对象中静态属性的作用域与模块中全局变量的作用域差别

1.之前我理解类是为了节省时间演化来的,因此里面的类的静态属性应该和模块中的全局变量作用范围类似,那类中的静态属性应该在整个类中都能访问。但实际为代码段所示。
2.

2.1  全局变量能被内部定义函数所访问:

c=10
def glass(x):
    return x*c 
>>> glass(5)      #能访问全局变量
50
2.实例对象中的方法直接访问静态属性:
class A:
    c=10
    def glass(self,x):
        return x*c       #除非改成return x*self.c

>>> a=A()
>>> a.glass(5)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a.glass(5)
File "F:/new/new world/ex45/delete.all1.py", line 4, in glass
return x*c
NameError: name 'c' is not defined
  1. 疑惑点:为什么有这样的差别呢?难道在类对象中,只能通过self.的形式来传递属性或者方法吗?
  • 写回答

1条回答 默认 最新

  • JonathanYan 2019-10-11 20:53
    关注

    对,这是规定,否则无法区分类属性和全局变量

    c = 5
    class A:
        c=10
        def glass(self,x):
            return x*c       #除非改成return x*self.c
    //考虑一下这句的运行结果
    print(A().glass(5))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料