首页 > 编程语言 >Python新手常见问题二:不正确的使用类变量

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

时间:2023-02-06 15:02:30浏览次数:36  
标签:... 常见问题 Python 引用 pass print 新手 class

Python新手常见问题二:不正确的使用类变量_多重继承

不正确的使用类变量

看下面一个例子:

>>> class A(object):
... x = 1
...
>>> class B(A):
... pass
...
>>> class C(A):
... pass
...
>>> print A.x, B.x, C.x
1 1 1

看起来没有问题。

>>> B.x = 2
>>> print A.x, B.x, C.x
1 2 1

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

>>> A.x = 3
>>> print A.x, B.x, C.x
3 2 3

只是改变了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,引用,pass,print,新手,class
From: https://blog.51cto.com/u_14448891/6039156

相关文章

  • Python新手常见问题三:在异常处理时错误的使用参数
    在异常处理时错误的使用参数假设你有如下的代码:>>>try:...l=["a","b"]...int(l[2])...exceptValueError,IndexError:#想捕捉两个异常...pass...Tr......
  • Python实现的简易FTP
    Python版本实现了比之前的xxftp更多更完善的功能1、继续支持多用户2、继续支持虚拟目录3、增加支持用户根目录以及映射虚拟目录的权限设置4、增加支持限制用户根目录或者虚......
  • Python中and、or用法实例
    Python中and、or是Python中的逻辑运算符,它们的用法如何呢?and:在Python中,and和or执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值;而是,返回它们实际进行比较的值......
  • Python工具箱系列(二十五)
    Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从......
  • Python工具箱系列(二十四)
    不管多少人黑微软,微软出品的大多数产品都能够深入人心,成为精品。在数据库领域,微软为专业人士提供SQLServer(简称mssql)。为日常办公人士提供Access与Excel这两款数据存储与......
  • 全流程搞清楚 Kubernetes API 的使用,可进行业务二次开发对接 k8s 调用,详细图文说明以
    全流程搞清楚KubernetesAPI的使用,可进行业务二次开发对接k8s调用,详细图文说明以及常见问题整理。使用CLI(如curl)或GUI(如postman)HTTP客户端调用KubernetesAPI有很多理由......
  • OpenCV-Python快速入门(十二):轮廓拟合
    OpenCV-Python快速入门(十二):轮廓拟合​​前言​​​​前提条件​​​​实验环境​​​​轮廓拟合​​​​矩形包围框(cv2.boundingRect())​​​​最小包围矩形框(cv2.minAreaRe......
  • Python中monkey.patch_all()解决协程阻塞问题
    Python全栈工程师核心面试300问深入解析(2020版)----全文预览Python全栈工程师核心面试300问深入解析(2020版)----欢迎订阅直接参考以下实例,采用协程访问三个网站......
  • Python中文编码的问题(UTF-8和CP936的区别)
    Python全栈工程师核心面试300问深入解析(2020版)----全文预览Python全栈工程师核心面试300问深入解析(2020版)----欢迎订阅对于python中中文无法显示,可在首行添加......
  • Python import 上级目录中的模块
    ​​Python全栈工程师核心面试300问深入解析(2020版)----全文预览​​Python全栈工程师核心面试300问深入解析(2020版)----欢迎订阅一般加上这段代码即可imports......