Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在uu dict中找不到python中的类变量___Python - Fatal编程技术网

在uu dict中找不到python中的类变量__

在uu dict中找不到python中的类变量__,python,Python,有一个代码: class C(): a=1 def f(self): print "f func" a=C() print a.a a.f() >>> 1 >>> f func 当我试图获取a.\uu dict\uuu或vars(a)时,它只显示{}。 但是 我不明白,为什么会这样。查看a.\uuu dict\uuu或vars(a)为您提供a的属性,这是一个实例。该实例最初没有自己的属性。在类定义中创建的属性a是类本身的属性

有一个代码:

class C():
    a=1
    def f(self):
        print "f func"

a=C()
print a.a
a.f()
>>> 1
>>> f func
当我试图获取
a.\uu dict\uuu
vars(a)
时,它只显示
{}
。 但是


我不明白,为什么会这样。

查看
a.\uuu dict\uuu
vars(a)
为您提供
a
的属性,这是一个实例。该实例最初没有自己的属性。在类定义中创建的属性
a
是类本身的属性,而不是其实例的属性。稍后当您执行
a.b=123
时,您将仅在实例上创建一个属性,以便可以在实例
\uuuu dict\uuuu
中看到它。如果查看
C.\uuu dict\uuu
,您将看到属性
a

当您打印a.a时,Python会在类
C
上动态查找属性
a
。它看到实例没有属性
a
,因此它查看类并在那里找到一个属性。这是打印的值。创建实例时不会将class属性“复制”到实例中;相反,每次尝试读取instance属性时,Python都会检查它是否存在于实例中,如果不存在,它会在类中查找它

>>> C.a
1
>>> vars(C)['a']
1
(一个类的整个
vars
字典相当长。)


正如标题所说,它是一个类变量。它属于类,而不是对象。Python在后台执行一些特殊的逻辑,以便在调用
a.a
时为您查看类型对象。我不是专家,但我怀疑它正在寻找一种方法,就像它找到一种方法一样。在Java这样的语言中,我认为这种用法是不被鼓励的。我不知道Python是否不鼓励使用它。

这可能有助于解释为什么
print a.a
prints 1,这可能是一个混淆点。
>>> C.a
1
>>> vars(C)['a']
1