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上的。)

知识点补充:

类变量、实例变量概念

类变量:

类变量就是定义在类中,但是在函数体之外的变量。通常不使用self.变量名赋值的变量。类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的。

实例变量:

实例变量是定义在方法中的变量,使用self绑定到实例上的变量,只是对当前实例起作用。

以上就是Python小白不正确的使用类变量实例的详细内容,更多关于Python新手不正确的使用类变量的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python面向对象程序设计之类和对象、实例变量、类变量用法分析

    本文实例讲述了Python面向对象程序设计之类和对象.实例变量.类变量用法.分享给大家供大家参考,具体如下: 类和对象: 类的定义:用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类的优势:将一个对象的功能集中于一体,便于操作,降低了代码的重复. 实例化:创建一个类的实例,类的具体对象. 对象:通过类定义的数据结构实例.对象包括两个数据成员(类变量和实例变量)和方法. 使用 class 语句来创建一个新类: class Dog: #self

  • python中类变量与成员变量的使用注意点总结

    前言 最近在用python写一个项目,发现一个很恶心的bug,就是同由一个类生成的两个实例之间的数据竟然会相互影响,这让我非常不解.后来联想到java的类有类变量也有实例变量,因此翻阅了相关资料,发现python也有类似的类变量和实例变量,下面来看看详细的介绍. 看下面的示例代码: class A: x = 0 def __init__(self): self.y = 0 x就是类变量,y就是实例变量. 原则上是没有错的,但是实际用的时候就发现一些恶心的问题(也就是我找了三天的bug)...比如

  • 理解java和python类变量以及类的成员变量

    最可怕的不是犯错而是一直都没发现错误,直到现在我才知道自己对类变量的理解有问题. 大概可能也许是因为不常用类变量的原因吧,一直没有发现这个问题.最近在看C++时才知道了类变量到底是什么? 以前我一直觉得类变量和成员变量的唯一区别是类变量可以通过类名直接访问,是静态的.而成员变量需要实例化一个类后通过实例来访问. 万万没想到忽视了类变量在一个类中只有一个,各个实例中的都是同一个的,在一个实例中修改会影响其他实例中的类变量...(虽然平常也没有因为这个而引起什么bug,但是还是要补上认知的漏洞).

  • python的类变量和成员变量用法实例教程

    本文实例形式讲解了python的类变量和成员变量用法,对于Python程序设计有一定的参考价值.分享给大家供大家参考.具体如下: 先看看下面这段代码: class TestClass(object): val1 = 100 def __init__(self): self.val2 = 200 def fcn(self,val = 400): val3 = 300 self.val4 = val self.val5 = 500 if __name__ == '__main__': inst =

  • Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析

    本文实例讲述了Python面向对象程序设计类变量与成员变量.类方法与成员方法用法.分享给大家供大家参考,具体如下: 类变量与成员变量 在类中声明的变量我们称之为类变量[静态成员变量], 在init()函数中声明的变量并且绑定在实例上的变量我们称之为成员变量. 类变量直接可以通过类名来调用. 1.若类变量与成员同时存在并且同名 使用对象来调用的时候,获取的结果是成员变量的值, 使用类名来调用,获取的是类变量的值. 2.若类变量存在,成员变量不存在, 使用对象来调用的时候,它首先寻找成员变量, 如果

  • Python之关于类变量的两种赋值区别详解

    我就废话不多说了,还是直接看代码吧! # -*- coding:utf-8 -*- #面试题,写一个方法,将一行字符串中所有的单词数量统计出来 class Person(object): TAG = "hello" p1 = Person() p2 = Person() print p1.TAG #第一种赋值方式 print p2.TAG print Person.TAG #第二种赋值方式 p1.TAG = "damn it" print p1.TAG print

  • 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 嗯哈,还是和预想

  • Python字符串和字典相关操作的实例详解

    Python字符串和字典相关操作的实例详解 字符串操作: 字符串的 % 格式化操作: str = "Hello,%s.%s enough for ya ?" values = ('world','hot') print str % values 输出结果: Hello,world.hot enough for ya ? 模板字符串: #coding=utf-8 from string import Template ## 单个变量替换 s1 = Template('$x, glorio

  • Python+tkinter模拟“记住我”自动登录实例代码

    本文分享的代码主要是通过Python+tkinter模拟"记住我"自动登录的功能,具体介绍如下. 基本思路:如果某次登录成功,则创建临时文件记录有关信息,每次启动程序时尝试自动获取上次登录成功的信息并自动编写.本文主要演示思路,可根据实际系统中的需要进行改写,例如读取数据库并验证用户名和密码是否正确.对用户名和密码进行本地加密存储等等. import tkinter import tkinter.messagebox import os import os.path # 获取Windo

  • Python使用requests及BeautifulSoup构建爬虫实例代码

    本文研究的主要是Python使用requests及BeautifulSoup构建一个网络爬虫,具体步骤如下. 功能说明 在Python下面可使用requests模块请求某个url获取响应的html文件,接着使用BeautifulSoup解析某个html. 案例 假设我要http://maoyan.com/board/4猫眼电影的top100电影的相关信息,如下截图: 获取电影的标题及url. 安装requests和BeautifulSoup 使用pip工具安装这两个工具. pip install

  • 基于Python log 的正确打开方式

    保存代码到文件:logger.py import os import logbook from logbook.more import ColorizedStderrHandler import smtplib LOG_DIR = os.path.join('log') if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR) def get_logger(name='test', file_log=False): logbook.set_date

  • 对python中if语句的真假判断实例详解

    说明 在python中,if作为条件语句,当if后面的条件参数为真时,则执行后面的语句块,反之跳过,为了深入理解if语句,我们需要知道if语句的真假判断方式. 示例 在python交互器中,经过测试发现以下条件均为假,相当于False In [2]: if '': ...: print('ok') ...: In [3]: if 0: ...: print('ok') ...: In [4]: if None: ...: print('ok') ...: In [5]: if []: ...:

  • python英语单词测试小程序代码实例

    这篇文章主要介绍了python英语单词测试小程序代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 爬取了扇贝英语网,并制作了一个英语单词测试的小程序,还能生成错词本,一起来看下代码吧- import requests #扇贝网爬虫,获取英语单词 category_res=requests.get('https://www.shanbay.com/api/v1/vocabtest/category/?_=1566889802182') ca

  • python根据文本生成词云图代码实例

    这篇文章主要介绍了python根据文本生成词云图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 效果 代码 from wordcloud import WordCloud import codecs import jieba #import jieba.analyse as analyse from scipy.misc import imread import os from os import path import matplot

  • 利用python实现简易版的贪吃蛇游戏(面向python小白)

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的做法,是到身边找问题,然后编程实现.比如说,我学了高等数学,我是不是应该考虑下如何去用编程实现求导或者积分操作,如果想不出怎么办,是不是应该 baidu 一下,别人是如何实现数值积分或是符号积分的.我们每天买东西都要用到加减甚至乘除,那么我是否能编写个简单的计算器,如果命令行太丑的话,我是否能够快速

随机推荐