教程集 www.jiaochengji.com
教程集 >  Python编程  >  Python入门  >  正文 Python新手常见问题二:不正确的使用类变量

Python新手常见问题二:不正确的使用类变量

发布时间:2021-12-28   编辑:jiaochengji.com
教程集为您提供Python新手常见问题二:不正确的使用类变量等资源,欢迎您收藏本站,我们将为您提供最新的Python新手常见问题二:不正确的使用类变量资源

不正确的使用类变量

看下面一个例子:

<pre class="brush:php;toolbar:false">>>> class A(object): ...     x = 1 ... >>> class B(A): ...     pass ... >>> class C(A): ...     pass ... >>> print A.x, B.x, C.x 1 1 1</pre>

相关推荐:《Python视频教程》

看起来没有问题。

<pre class="brush:php;toolbar:false">>>> B.x = 2 >>> print A.x, B.x, C.x 1 2 1</pre>

嗯哈,还是和预想的一样。

<pre class="brush:php;toolbar:false">>>> A.x = 3 >>> print A.x, B.x, C.x 3 2 3</pre>

我了个去。只是改变了A.x,为啥C.x也变了?

在Python里,类变量通常在内部被当做字典来处理并遵循通常所说的方法解析顺序(Method Resolution Order (MRO))。因此在上面的代码中,因为属性x在类C中找不到,因此它会往上去它的基类中查找(在上面的例子中只有A这个类,当然Python是支持多重继承(multiple inheritance)的)。换句话说,C没有它自己独立于A的属性x。因此对C.x的引用实际上是对A.x的引用。(B.x不是对A.x的引用是因为在第二步里B.x=2将B.x引用到了2这个对象上,倘若没有如此,B.x仍然是引用到A.x上的。)

相关推荐:

python新手常见问题一:乱用表达式

您可能感兴趣的文章:
Python新手常见问题二:不正确的使用类变量
Python新手常见问题三:在异常处理时错误的使用参数
python和c语言的区别是什么
c 跟 python的区别有哪些
学习Python却没看过这几本书,你就OUT了
Python的高级特性:容易忽略的不可变类型
选Python好还是Java好 ?
PHP变量详解和定义变量名的方法
一起来看看Python中常见的陷阱
python如何操作手机

[关闭]
~ ~