对Python变量说明介绍

开发 后端
事实上,它们只是与类和对象的名称空间 绑定 的普通变量,即这些名称只在这些类与对象的前提下有效。

Python变量中所有的类成员都是公共的 ,所有的方法都是有效的,只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。

这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同),同样,注意__del__方法与 destructor 的概念类似。

有两种类型的域 ——类的变量和对象的变量,它们根据是类还是对象 拥有 这个变量而区分。类的变量 由一个类的所有对象(实例)共享使用。只有一个类Python变量的拷贝,所以当某个对象对类的Python变量做了改动的时候,这个改动会反映到所有其他的实例上。

对象的变量 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。通过一个例子会使这个易于理解使用类与对象的变量

  1. #!/usr/bin/python  
  2. # Filename: objvar.py  
  3.  
  4. class Person:  
  5.     '''Represents a person.'''  
  6.     population = 0 
  7.  
  8.     def __init__(self, name):  
  9.         '''Initializes the person's data.'''  
  10.         self.name = name  
  11.         print '(Initializing %s)' % self.name  
  12.  
  13.         # When this person is created, he/she  
  14.         # adds to the population 

这是一个很长的例子,但是它有助于说明类与对象的变量的本质。这里,population属于Person类,因此是一个类的变量。name变量属于对象(它使用self赋值)因此是对象的变量

观察可以发现__init__方法用一个名字来初始化Person实例。在这个方法中,我们让population增加1,这是因为我们增加了一个人。同样可以发现,self.name的值根据每个对象指定,这表明了它作为对象的变量的本质。

记住,你只能使用self变量来参考同一个对象的Python变量和方法。这被称为 属性参考 。在这个程序中,我们还看到docstring对于类和方法同样有用。我们可以在运行时使用Person.__doc__和Person.sayHi.__doc__来分别访问类与方法的文档字符串。

就如同__init__方法一样,还有一个特殊的方法__del__,它在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用。在这个方法里面,我们只是简单地把Person.population减1。

当对象不再被使用时,__del__方法运行,但是很难保证这个方法究竟在 什么时候 运行。如果你想要指明它的运行,你就得使用del语句,就如同我们在以前的例子中使用的那样。

【编辑推荐】

  1. 如何使Python嵌入C++应用程序?
  2. 深入探讨Ruby与Python语法比较
  3. Python学习资料介绍分享
  4. Python学习经验谈:版本、IDE选择及编码解决方案
  5. 浅析Python的GIL和线程安全
责任编辑:chenqingxiang 来源: 清华大学出版社
相关推荐

2010-02-02 14:42:38

Python线程

2010-02-22 11:14:43

Python编写

2010-03-01 13:13:02

Python应用线程

2010-02-26 13:56:08

Python RSS

2010-02-24 16:44:58

Python 函数

2010-02-26 10:07:55

Python编程语言

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性

2009-12-21 10:01:05

Oracle技术

2009-12-08 16:09:02

WCF消息

2010-01-25 18:19:17

C++特性

2010-01-15 19:34:25

C++设计

2010-03-15 09:32:56

Python函数

2010-03-01 18:01:45

Python环境变量

2009-12-14 17:44:39

Visual Stud

2010-01-14 13:39:45

Visual C++优

2010-01-05 13:29:50

JSON对象

2010-02-01 18:06:48

Python Edit

2010-02-22 16:16:14

Python语法

2010-02-03 17:37:30

Python语法
点赞
收藏

51CTO技术栈公众号