`
heipark
  • 浏览: 2077911 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用python class变量的风险

 
阅读更多
class Parent(object):
    x = 1
class Child1(Parent):
    pass
class Child2(Parent):
    pass

print Parent.x, Child1.x, Child2.x
# 1 1 1

Child1.x = 2
print Parent.x, Child1.x, Child2.x
# 1 2 1

Parent.x = 3
print Parent.x, Child1.x, Child2.x
# 3 2 3

 

这段代码重点在第三次print结果“3 2 3”

当子类没有重新设置父类的变量时,会直接使用父类的变量,所以当父类变量发生变化时,Child2也发生变化。

 

我们可以用下面代码列出类的属性

print ', '.join(['%s:%s' % item for item in Child2.__dict__.items()])

 输出:

“Child2 __module__:__main__, __doc__:None”

 

可以看出里面是没有属性“x”的。所以会引用父类的x值。

 

对于并发运行多个子类的场景,子类使用class变量有可能导致value传递到其它子类。所以我们要明确在子类使用前对变量进行初始化。

分享到:
评论

相关推荐

    对python 中class与变量的使用方法详解

    今天小编就为大家分享一篇对python 中class与变量的使用方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Python程序设计:Python常量和变量.pptx

    在本任务中,我们将先学习Python变量、字符串、列表、字典、集合等的使用方法,并穿插相应的案例及分析过程,实行理论讲解和案例分析相结合的方式。 任务 NBA球星信息查询 任务知识点 Python常量和变量 Python数字和...

    python实现跨文件全局变量的方法

    在使用Python编写的应用的过程中,有时候会遇到多个文件之间传递同一个全局变量的情况。本文就此给出了如下的解决方法供大家参考。 文件1:globalvar.py #!/usr/bin/env python2.7 class GlobalVar: db_handle = ...

    Python全局变量与局部变量区别及用法分析

    本文实例讲述了Python全局变量与局部变量区别及用法。分享给大家供大家参考,具体如下: 对于很多初学的同学,对全局和局部变量容易混淆,看看下面给大家的讲解相信都应该明白两者的区别了。 定义: 全局变量:在...

    python实现类的静态变量用法实例

    本文实例讲述了python类的静态变量用法。分享给大家供大家参考。具体分析如下: 这里使用静态变量目的是在类中实现一个静态的队列,这里用数组实现,任何时候插入到队列中的数据不会和类的实例有直接关系。 __...

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

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

    python的变量与赋值详细分析

    1.不能使用python的关键字,也就是说标记不能被提前占用,python的关键字包括: [‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’,...

    Python中实例化class的执行顺序示例详解

    本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定义一个名为A的类 class A...

    浅谈Python中的私有变量

    class Teacher(): def __init__(self,name,level): self.__name=name self.__level=level #获取老师的等级 def get_level(self): return self.__level #获取名字 def get_in_name(self): return self.__...

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

    后来联想到java的类有类变量也有实例变量,因此翻阅了相关资料,发现python也有类似的类变量和实例变量,下面来看看详细的介绍。 看下面的示例代码: class A: x = 0 def __init__(self): self.y = 0 x就是类...

    Python中查看变量的类型内存地址所占字节的大小

    Python中查看变量的类型,内存地址,所占字节的大小 查看变量的类型 #利用内置type()函数 >>> nfc=["Packers","49"] >>> afc=["Ravens","48"] >>> combine=zip(nfc,afc) >>> type(combine) <class> 查看变量的内存...

    python 全局变量的import机制介绍

    class IServer: def __init__(self): pass @abstractmethod def DoWithA(self): pass @abstractmethod def DoWithB(self): pass IServer_A.py import IServer serverType ='1001' print __name__ dir() ...

    Python中设置变量访问权限的方法

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性:...

    变量和简单的数据类型

    • 不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词。 • Python关键字 false class finally is return none continue for lambda try true def from nonlocal while and del global...

    Python 类(Class)

    文章目录类(Class)类定义语法类对象实例对象方法对象类和实例变量 类(Class) 关于类(Class),是一个很抽象的概念。本篇幅简单介绍关于类的一些基础内容。更多深入的内容,可详阅官方文档: ...

    单纯形算法及对偶的python实现

    使用python编程语言通过矩阵运算编程来实现单纯形算法。 1.建立模型后输入数据列出初始单纯形表 将线性规划问题转化为标准型,求minz转化为求max-z 以下图为例 初始化 import numpy as np class Simplex(object): ...

    python基础-类成员变量-提供python2代码,可以直接测试

    python基础-类成员变量-提供python2代码,可以直接测试,部分代码如下 class Person: '''Represents a person.''' population = 0 def __init__(self, name): '''Initializes the person's data.''' self.name ...

    python类和函数中使用静态变量的方法

    本文实例讲述了python类和函数中使用静态变量的方法。分享给大家供大家参考。具体分析如下: 在python的类和函数(包括λ方法)中使用静态变量似乎是件不可能[Nothing is impossible]的事, 但总有解决的办法,下面通过...

    Python面向对象之类和对象实例详解

    class Turtle:#python 中类名约定以大写字母开头 '''关于类的简单例子。。。''' #属性 == 类变量 color ="green" weight="10kg" legs=4 shell=True mouth='big' #方法 def climb(self):

Global site tag (gtag.js) - Google Analytics