`
heipark
  • 浏览: 2097085 次
  • 性别: 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编程中,理解和掌握`class`及变量的使用是十分重要的。本文将从不同角度深入解析Python中的变量类型(包括全局变量、局部变量、对象变量、类变量等)及其作用域,并通过...

    python中变量作用域及嵌套作用域.pdf

    在 Python 中,可以使用 def、class、lambda 等语句来改变变量的作用域。例如,使用 def 语句可以定义一个函数,并在函数内部定义一个变量,这样该变量的作用域将被限制在函数内部。 变量搜索路径是:本地变量->...

    Python语言基础:变量.pptx

    在Python中,变量的使用是非常灵活的,不需要像其他一些语言那样预先声明变量的类型。我们可以直接通过赋值来创建变量,比如: ```python x = 3 # 创建了一个整型变量x,赋值为3 x = "Hello World." # 将变量x重新...

    python变量.pdf

    理解变量的概念、命名规则以及如何使用它们对于掌握Python编程至关重要。 #### 注释 - **作用**:注释在Python中用于添加解释性文本,帮助其他开发者更好地理解代码的功能和逻辑。 - **格式**: - **行注释**:以`...

    python实现的简单的class解析以及简单执行class.zip

    在本主题中,我们将探讨如何使用Python来解析Java的Class文件,并对其进行简单的执行。这是一项有趣的技术,可以帮助我们理解Java字节码的工作原理,同时也可以在Python环境中运行Java代码。 首先,Java的Class文件...

    Python私有变量的用法共1页.pdf.zip

    不过,Python提供了一种“间接”访问私有变量的方式,即通过使用`_类名__变量名`的格式,也被称为名称 mangling。例如,我们可以通过`_Person__name`来访问`Person`类的`__name`私有变量: ```python person = ...

    Python-对象和变量.docx

    在Python编程语言中,对象和变量是核心概念,它们构成了程序的基本结构。在这个文档中,我们将探讨Python中的数字对象(包括整数和浮点数)以及字符串对象,并介绍变量的概念。 首先,Python中的数字对象包括整数...

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

    这个实例的属性可以作为静态变量使用: ```python def foo2(n=0): class acc: def __init__(self, s): self.s = s def inc(self, i): self.s += i return self.s return acc(n).inc a = foo2() print(a(1...

    学习python中变量作用域及嵌套作用域.pdf

    闭包可以捕获外部函数的变量,并在后续调用时使用这些变量。闭包是 Python 中实现最内嵌套作用域规则的实现方案。 Python 中的变量名赋值会创建或者改变本地变量,全局声明将会给映射到模块文件内部的作用域的变量...

    Python 如何在字符串中插入变量

    在Python编程中,插入变量到字符串中是一种常见的需求,用于构建动态文本。本文将深入探讨如何在Python字符串中插入变量,以及如何优雅地处理变量缺失的情况。 首先,Python没有直接支持在字符串中替换变量的语法,...

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

    - 在类定义中,可以使用 `@classmethod` 或 `@staticmethod` 来更好地控制类方法和静态方法的行为,从而避免不必要的类变量使用。 #### 结论 通过本文的介绍,我们了解了Python中类变量与成员变量的区别及其使用...

    pythonclass作业.zip

    Pythonclass作业是一个典型的编程学习项目,它通常包含了学习者在Python课程中的练习和项目。从这个zip文件的名称我们可以推测,这可能是一个关于Python编程的学习资料包,其中可能包括了学员完成的课后习题、代码...

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

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

    python 基础-类成员变量,提供python2代码示例

    Python 基础类成员变量是面向对象编程中的核心概念,它们定义了对象的状态和行为。在Python中,类是用来创建对象的蓝图,而对象则是类的实例。类成员变量可以分为实例变量和类变量。 **实例变量**是与特定对象相关...

    python 变量命名规范1

    8. **专有变量**:以双下划线开头和结尾的变量,如`__doc__`、`__class__`,是Python的内置特殊变量,不应随意创建类似命名的变量。 9. **函数和方法**:函数名同样使用小写字母和下划线,例如`get_name()`、`count...

    python中变量作用域及嵌套作用域宣贯.pdf

    在Python编程语言中,变量的作用域是指变量在代码中的可见范围。理解变量作用域对于编写清晰、可维护的代码至关重要。Python遵循LEGB(Local, Enclosing, Global, Built-in)规则来查找变量,这意味着变量查找顺序是...

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

    Java 和 Python 是两种广泛使用的编程语言,它们都支持面向对象编程。在面向对象编程中,类变量(也称为静态变量)和成员变量(也称为实例变量)是两个重要的概念,它们各自有不同的作用和特点。 首先,让我们理解...

Global site tag (gtag.js) - Google Analytics